Seite 1 von 1

Zu Website verbinden und Antwort einlesen

Verfasst: 14.07.2018 12:39
von Delle
Hallo,

das dürfte doch normalerweise den HTML-Code wiedergeben:

Code: Alles auswählen

 InitNetwork()

ConnectionID.l = OpenNetworkConnection("www.google.de", 80)
   com$=""
   
   Res.l=0
   Site.s=""

   If ConnectionID
   com$="GET https://www.google.de/?irgendwas=1 HTTP/1.1"+#CRLF$+"Accept: */*"+#CRLF$+"Accept: text/html"+#CRLF$+"Host: google.de"+#CRLF$+#CRLF$

      SendNetworkData(ConnectionID, @com$, StringByteLength(com$))
      *Buffer = AllocateMemory($10000)
      Res = ReceiveNetworkData(ConnectionID, *Buffer, MemorySize(*Buffer))
      Site + PeekS(*Buffer, Res)
      CloseNetworkConnection(ConnectionID)

      Debug site
      
      EndIf
Zumindest habe ich das so vor paar Jahren noch in PB genutzt... hat sich da zwischenzeitlich irgendwas geändert?

Re: Zu Website verbinden und Antwort einlesen

Verfasst: 14.07.2018 16:16
von STARGÅTE
PB nutzt jetzt intern immer UNICODE für Strings. Somit kannst du nicht einfach SendNetworkData mit dem String-Pointer übergeben, weil die Website vermutlich Ascii/UTF8 erwartet.

Also:

Code: Alles auswählen

SendNetworkData(ConnectionID, Ascii(com$), StringByteLength(com$, #PB_Ascii))
und

Code: Alles auswählen

Site + PeekS(*Buffer, Res, #PB_UTF8)
Edit: Konstanten korrigiert.

Re: Zu Website verbinden und Antwort einlesen

Verfasst: 14.07.2018 18:33
von NicTheQuick
Abgesehen davon würde ich sogar noch davon ausgehen, dass Google jetzt überhaupt keine HTTP Suchanfragen mehr annimmt seitdem die DSGVO durchgesetzt ist. Aber ich habe das noch nicht verifiziert.

Re: Zu Website verbinden und Antwort einlesen

Verfasst: 14.07.2018 18:59
von Sicro
Delle hat geschrieben:

Code: Alles auswählen

ConnectionID.l
Die Variable sollte den Typ "Integer" haben, sonst gibt es Probleme bei einem 64-Bit-System.

Seit einer Weile gibt es den Befehl "ReceiveHTTPMemory()", der die Aufgabe vereinfacht:

Code: Alles auswählen

InitNetwork()
*Memory = ReceiveHTTPMemory("https://www.google.de/?irgendwas=1")
If *Memory
  Debug PeekS(*Memory, MemorySize(*Memory), #PB_UTF8 | #PB_ByteLength)
  FreeMemory(*Memory)
EndIf