Seite 1 von 2

Saubere Abfrage mittels Network von z.B. Google

Verfasst: 25.08.2005 19:14
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

Verfasst: 25.08.2005 19:24
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.

Verfasst: 25.08.2005 19:32
von Delle
Weißt was Du meinst.... geht sowas nicht:

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

???

Verfasst: 25.08.2005 19:38
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.

Verfasst: 25.08.2005 19:43
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.

Verfasst: 25.08.2005 19:44
von Green Snake
:oops:

sorry, bin müde, wütend, und habs deshalb überlesen.
nichts für ungut :D

Verfasst: 25.08.2005 19:46
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.

Verfasst: 25.08.2005 19:47
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...

Verfasst: 25.08.2005 19:54
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.

Verfasst: 25.08.2005 20:01
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