Saubere Abfrage mittels Network von z.B. Google

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Saubere Abfrage mittels Network von z.B. Google

Beitrag von Delle »

Das liefert bei mir nur Müll:

Code: Alles auswählen

InitNetwork() 
ConnectionID = OpenNetworkConnection("www.google.de", 80) 

buf$="GET / HTTP/1.0"+Chr(10)+Chr(10)+"Host: www.google.de"+Chr(10)+Chr(10) 

Buffer = AllocateMemory(100) 
SendNetworkData(ConnectionID, buf$, Len(buf$)) 
CreateFile(0,"c:\windows\desktop\anal.html") 
While ReceiveNetworkData(ConnectionID, Buffer, 100) 
    WriteString(PeekS(Buffer)) 
Wend 
CloseFile(0) 
CloseNetworkConnection(ConnectionID) 

RunProgram("c:\windows\desktop\anal.html") 
Ebenso wenn man "GET" durch "HEAD" ersetzt ist der Header am Schluss immer verstümmelt:

[quote]HTTP/1.0 302 Found
Location: http://www.google.de/cxfer?c=PREF%3D:TM ... JfYMv76Avw
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Code: Alles auswählen

While ReceiveNetworkData(ConnectionID, Buffer, 100) 
  WriteString(PeekS(Buffer)) 
Wend
zu

Code: Alles auswählen

len = ReceiveNetworkData(ConnectionID, Buffer, 100)
While len
  WriteString(PeekS(Buffer,len)) 
  len =ReceiveNetworkData(ConnectionID, Buffer, 100)
Wend
ändern. Könnt zwar sein das noch was falsch ist (habs nich getestet), aber das solltest du mindestens ändern.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Weißt was Du meinst.... geht sowas nicht:

while(!feof($sock)){$inhalt.=fgets($sock,128);}

???
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

wenn ich den code falsch verstanden habe, dann bitte nicht hauen :wink:
wies aussieht willst du eine zuweisung (zb. a=b) machen

in pb kann man (leider) KEINE zuweisungen in while, if etc machen.
-.-"
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

@Snake
Wo siehst du hier eine Zuweisung in der While schleife?
while(!feof($sock))
{
$inhalt .= fgets($sock,128);
}

Zum Problem. Ich würde empfehlen einen Speicherberreich mit 4069 Bytes
zu reservieren. Vielleicht kann dies das Problem beheben.
Bild
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

:oops:

sorry, bin müde, wütend, und habs deshalb überlesen.
nichts für ungut :D
-.-"
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Delle hat geschrieben:Weißt was Du meinst.... geht sowas nicht:

while(!feof($sock)){$inhalt.=fgets($sock,128);}

???
Nicht direkt, weil du den Buffer nicht löschst (in PHp wird ja immer ein neuer erstellt), desswegen musst du entweder die Länge beachten oder vor jedem aufruf von Receive... rtlZeroMemory(Buffer,len) aufrufen.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Okay, mit 4096 ginge es sicherlich besser ohne Überschneidungen...

Trotzdem ist es komisch, daß mit PHP mit GET www.google.de
schön eingelesen werden kann und mit PB kommt ein 302...
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Delle hat geschrieben:mit PB kommt ein 302...
Ich schätze PHP folgt dem selbstständig.

Du musst dann natürlich auch die Chr_13;Chr_10 Endungen von den Nachrichten entfernen (was PHP automatisch macht), sonst wirst du immer die 2 Zeichen drin haben.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

PHP-HEAD-REQUEST www.google.de:

Code: Alles auswählen

HTTP/1.0 200 OK
Cache-Control: private
Content-Type: text/html
Set-Cookie: PREF=ID=b154653483287d64:TM=1124992386:LM=1124992386:S=EwhRq1Rq24NZXa8-; expires=Sun, 17-Jan-2038 19:14:07 GMT; pat
h=/; domain=.google.de
Server: GWS/2.1
Content-Length: 0
Date: Thu, 25 Aug 2005 17:53:06 GMT
Connection: Keep-Alive
Also wenn wirklich ein 302 da wäre, dann würde kein 200 kommen.

Ich vermute es liegt irgendwie an "GET / HTTP...", also an dem
Schrägstrich und das nichts mehr dahinter steht wie index.php oder so
Antworten