[Gelöst] HTTP Request

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

[Gelöst] HTTP Request

Beitrag von Tur0k »

Hallo Community!

Ich beschäftige mich seit heute mit HTTP Request.
Mein Code funktioniert, aber liefert mir ständig ein anderes Resultat.
Ich bekomme einpaar mal in buffer.htm mehrfach komische Zeichen wie: �������������... usw
oder der HTML Code hört bei einem Punkt auf. (Nicht komplett geladen)

Ich glaube es liegt an: *Buffer = AllocateMemory(10000)
Leider habe ich keine Lösung gefunden... :freak:

Code: Alles auswählen

InitNetwork()
header.s
info.s
id.l
result.s
*Buffer = AllocateMemory(10000)
id = OpenNetworkConnection("Seite", 80)
info = "Daten"

If id

   header + "POST /index.php HTTP/1.1" + #CRLF$
   header + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" + #CRLF$
   header + "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" + #CRLF$
   header + "Host: Seite" + #CRLF$
   header + "Content-Length: "+Str(Len(info)) + #CRLF$
   header + "Content-Type: application/x-www-form-urlencoded" + #CRLF$
   header + "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3" + #CRLF$
   header + "Cache-Control: no-cache" + #CRLF$
   header + "Cookie: keep-alive" + #CRLF$ + #CRLF$
   
   header + info + #CRLF$
   
   SendNetworkString(id, header)
   
   Repeat
      Delay(10)
      Until NetworkClientEvent(id)

   
   ReceiveNetworkData(id, *Buffer, MemorySize(*Buffer))
   result = PeekS(*Buffer)
   
   If CreateFile(0, "buffer.htm")
    WriteData(0, *Buffer, MemorySize(*Buffer))
    CloseFile(0)
    RunProgram("buffer.htm")
   EndIf
   
   CloseNetworkConnection(id)
EndIf
End
*Den Code hab ich mal irgendwo im Forum gefunden und bisschen verändert*

Mit einem HTTP Request Generator hatte ich keine Probleme. Er erzeugte mir immer den vollständigen Quellcode der Seite.
Hier, falls jemand ihn braucht (inkl. Source): http://www.softpedia.com/get/Internet/O ... ator.shtml


Ich bedanke mich schon jetzt für eure Hilfe! :)
Zuletzt geändert von Tur0k am 04.01.2010 22:24, insgesamt 1-mal geändert.
buuh* :D
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: HTTP Request

Beitrag von Kiffi »

Du solltest 'result' in die Datei schreiben und nicht den kompletten Buffer ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Re: HTTP Request

Beitrag von Tur0k »

Danke für deine Antwort, Kiffi.

Wäre doch dann: WriteString(0, result) ?

Funktioniert leider irgendwie nicht.
Die Seite ladet wieder bis zur hälfte oder weniger.
buuh* :D
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: HTTP Request

Beitrag von Kiffi »

Tur0k hat geschrieben:Wäre doch dann: WriteString(0, result) ?
korrekt.
Tur0k hat geschrieben:Die Seite ladet wieder bis zur hälfte oder weniger.
Wie groß ist denn diese Hälfte? 10000 Bytes?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Re: HTTP Request

Beitrag von Tur0k »

Wie meinst du das? :shock:

Die HTM Datei ist 2.83

Auch wenn ich: AllocateMemory(10000) erhöhe, bekomme ich unterschiedliche Resultate... :freak:
buuh* :D
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: HTTP Request

Beitrag von HeX0R »

Tur0k hat geschrieben: Funktioniert leider irgendwie nicht.
Die Seite ladet wieder bis zur hälfte oder weniger.
Natürlich lädt sie nahezu niemals vollständig, meinst du in 10ms ist die ganze Seite bereits da?
1.) Musst du den Rückgabewert von ReceiveNetworkData() auch VERWENDEN.
2.) Wirst du feststellen, dass du mehrere Aufrufe benötigst, bis die ganze Seite da ist. Das muss also in eine Schleife (oder die ganz ganz schlechte Variante ein Delay(2000) vor den ReceiveNetworkData()-Aufruf).
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Re: HTTP Request

Beitrag von Tur0k »

Vielen Dank.

Welche Schleife wäre da am besten geeignet?

Edit: Mit ReceiveNetworkData bekomme ich die zurzeit geladene Bytes im Speicher, die muss ich vergleichen mit der index.php Grösse?
buuh* :D
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: HTTP Request

Beitrag von edel »

Nein, du vergleichst lediglich die gelesenen Bytes mit der Memoryblockgroesse, ist der Block groesser als die gelesenen Bytes, hast du alles geladen.
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Re: HTTP Request

Beitrag von Tur0k »

Danke für deine Antwort.

Ich hab den original Code gefunden: http://forums.purebasic.com/german/view ... tp+request

Code: Alles auswählen

  Repeat
   
    size = ReceiveNetworkData(id, *buffer, MemorySize(*buffer))
    result + PeekS(*buffer)
   
   For index = 1 To  CountString(result, #CRLF$)+1
    Debug StringField(result,index, #CRLF$)
  Next

  ; bzw einfach nur debug result

  Until size<MemorySize(*buffer)
ist doch korrekt? Trotzdem wird nicht alles geladen :S
buuh* :D
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: HTTP Request

Beitrag von Kiffi »

Tur0k hat geschrieben:ist doch korrekt?
nein. Du führst so lange ReceiveNetworkData() in einer
Schleife aus, bis 'size' kleiner als 'MemorySize(*Buffer)' ist.

Innerhalb dieser Schleife fügst Du das PeekS() an das 'result' an.

Grüße ... Kiffi
a²+b²=mc²
Antworten