Zu Website verbinden und Antwort einlesen

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

Zu Website verbinden und Antwort einlesen

Beitrag 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?
PB 6.02 LTS + Win 11
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Zu Website verbinden und Antwort einlesen

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8677
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Zu Website verbinden und Antwort einlesen

Beitrag 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.
Bild
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Zu Website verbinden und Antwort einlesen

Beitrag 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
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Antworten