HTTP Request/Response

Anfängerfragen zum Programmieren mit PureBasic.
tonisarov
Beiträge: 4
Registriert: 20.10.2009 21:40
Wohnort: Berlin

HTTP Request/Response

Beitrag von tonisarov »

Hallo,

habe schon mal bisschen darüber gelesen und auch paar Themen im Forum gelesen, leider passte nichts zu meinem Problem, deswegen neues Thema.

Code: Alles auswählen

CRLF$ = Chr(13) + Chr(10)

toSend$ = "GET / HTTP/1.1" + CRLF$
toSend$ = toSend$ + "Host: welt2.travian.de" + CRLF$
toSend$ = toSend$ + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" + CRLF$
toSend$ = toSend$ + "Accept-Language: en-us,en;q=0.5" + CRLF$
toSend$ = toSend$ + "Accept-Encoding: gzip,deflate" + CRLF$
toSend$ = toSend$ + "Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7" + CRLF$
toSend$ = toSend$ + "Keep-Alive: 300" + CRLF$
toSend$ = toSend$ + "Connection: keep-alive" + CRLF$
toSend$ = toSend$ + CRLF$

OpenConsole()
Print(toSend$)
Input()
CloseConsole()

InitNetwork()

travi = OpenNetworkConnection("welt2.travian.de", 80)
SendNetworkData(travi, @toSend$, Len(toSend$))
*content = AllocateMemory(5000)
Repeat
      Delay(100)
      Result = NetworkClientEvent(travi)
      Debug Result
     
      Select Result

      Case 2
        ReceiveNetworkData(travi,*content,1000)
        Ok = 1
        CloseNetworkConnection(travi)
     EndSelect

Until Ok = 1 

  If CreateFile(0, "C:/response.txt")
    WriteString(0, PeekS(*content,150), #PB_Unicode)
  EndIf
also ich will einfach das Dokument was auf welt2.travian.de ist. Oben erstelle ich mein HTTP Request - alle Zeilen enden mit CRLF und am Ende das noch mal. Dann neue Verbindung zum Webserver (port 80) herstellen, Request schicken und dann Response lesen.
Alles prima, aber wenn ich die Datei "response.txt" öffne, kommt bisschen HTML, wo zu sehen ist: den Statuscode 400 und Bad request.
Und was mich noch mehr verwirrt - wenn ich das alles via Telnet erledige, dann kriege ich ganz normales Response. Also ich gehe davon aus, mein Request ist fehlerfrei. Sitze schon seit einem Tag daran und habe keine Ideen mehr.
Danke im voraus!
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: HTTP Request/Response

Beitrag von Kiffi »

Travian Games GmbH-AGB hat geschrieben:(5) Der Nutzer ist lediglich berechtigt, das Spiel über gängige Webbrowser zu nutzen.
Jegliche darüber hinausgehende Nutzung von Zusatzprogrammen, Skripten oder sonstigen
Hilfsmitteln ist ausdrücklich untersagt. Eine Missachtung dieses Verbots kann ebenfalls nach
Abmahnung zur sofortigen Sperrung oder Löschung des betreffenden Accounts führen.
Lass lieber die Finger davon ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: HTTP Request/Response

Beitrag von ts-soft »

Schalt mal den Unicode-Modus in den Compileroptionen aus.
response.txt hat geschrieben:H T T P / 1 . 1 2 0 0 O K

S e r v e r : n g i n x

D a t e : T u e , 2 0 O c t 2 0 0 9 2 0 : 0 9 : 1 3 G M T

C o n t e n t - T y p e : t e x t / h t m l ; c h a r s e t = U T F - 8

T r a n s f e r - E n c o d i n g : c h u n k e d

C o n n e c t i o n : k
tonisarov
Beiträge: 4
Registriert: 20.10.2009 21:40
Wohnort: Berlin

Re: HTTP Request/Response

Beitrag von tonisarov »

Danke ts-soft, habe den Hacken vor "Create unicode executable" weggenommen, aber das verwirrt mich weiter - was für Einfluss hat das auf den Output. Schließlich kompiliere ich den Code und habe nicht mal "Create executable..." gemacht.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: HTTP Request/Response

Beitrag von ts-soft »

tonisarov hat geschrieben:Schließlich kompiliere ich den Code und habe nicht mal "Create executable..." gemacht.
PB erstellt immer eine Executable, in diesem Falle eben temporär. Ist ja schließlich kein Interpreter :)

// Nachtrag:
Ändere den Source mal in:

Code: Alles auswählen

toSend$ = "GET / HTTP/1.1" + #CRLF$
toSend$ = toSend$ + "Host: welt2.travian.de" + #CRLF$
toSend$ = toSend$ + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" + #CRLF$
toSend$ = toSend$ + "Accept-Language: en-us,en;q=0.5" + #CRLF$
toSend$ = toSend$ + "Accept-Encoding: gzip,deflate" + #CRLF$
toSend$ = toSend$ + "Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7" + #CRLF$
toSend$ = toSend$ + "Keep-Alive: 300" + #CRLF$
toSend$ = toSend$ + "Connection: keep-alive" + #CRLF$
toSend$ = toSend$ + #CRLF$

OpenConsole()
Print(toSend$)
Input()
CloseConsole()

InitNetwork()

travi = OpenNetworkConnection("welt2.travian.de", 80)
SendNetworkData(travi, @toSend$, Len(toSend$))
*content = AllocateMemory(5000)
Repeat
  Delay(100)
  Result = NetworkClientEvent(travi)
  Debug Result

  Select Result

    Case 2
      ReceiveNetworkData(travi, *content, 1000)
      Ok = 1
      CloseNetworkConnection(travi)
  EndSelect

Until Ok = 1

If CreateFile(0, "C:\response.txt")
  WriteString(0, PeekS(*content, -1, #PB_UTF8))
EndIf
ohne Unicode!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: HTTP Request/Response

Beitrag von AND51 »

Du suchst nicht zufällig ReceiveHTTPFile()?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
tonisarov
Beiträge: 4
Registriert: 20.10.2009 21:40
Wohnort: Berlin

Re: HTTP Request/Response

Beitrag von tonisarov »

@AND51: ReceiveHTTPFile() wird auch hilfreich sein, aber wenn ich POST requests mache, soll ich es allein schreiben, oder?

Also jetzt kriege ich Response vom Server (Status 200 OK), aber laut HTTP Spezifikation sollte ich auch den Code selber kriegen, ich meine den entsprechenden HTML Dokument was meines Requests entspricht. Wie davor gesagt, klappt das via Telnet prima, aber nicht hier.
Benutzeravatar
HeX0R
Beiträge: 3042
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/Response

Beitrag von HeX0R »

Vermutlich reichen die 1000 Zeichen nicht aus?

Ausserdem muss man sich beim Daten empfangen schon etwas mehr Mühe geben, als das was da im Code steht...
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: HTTP Request/Response

Beitrag von bobobo »

guck dir mal den http-requester aus dem codearchiv an
http://www.purearea.net/pb/CodeArchiv/I ... quester.pb
der kann das
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
tonisarov
Beiträge: 4
Registriert: 20.10.2009 21:40
Wohnort: Berlin

Re: HTTP Request/Response

Beitrag von tonisarov »

ich habe den Code bisschen geändert, jetzt liest er meiner Meinung nach alle Symbolen aus dem Response (ist zumindest mit Debug zu sehen), schreibt aber nichts in Datei. Noch ein weiteres Problem ist, dass Response Header - der Teil mit Status code usw ist lesbar, der Body - nicht.

Code: Alles auswählen

*content = AllocateMemory(8000)
Repeat

  Delay(100)
  Result = NetworkClientEvent(travi)

  Select Result
	Case 0
		Break
    Case 2
      ReceiveNetworkData(travi, *content, 500)
      Debug PeekS(*content)
      ;Debug "travi: " + Str(travi)
      ;Debug "result: " + Str(Result)
      If travi = 0
      	Break
      EndIf
  EndSelect

ForEver
CloseNetworkConnection(travi)

If CreateFile(0, "C:\response.txt")
    WriteString(0, PeekS(*content,-1, #PB_UTF8))
EndIf
Antworten