get http stuff ohne webGadget

Anfängerfragen zum Programmieren mit PureBasic.
broozar
Beiträge: 97
Registriert: 08.03.2010 15:53
Wohnort: Berlin
Kontaktdaten:

get http stuff ohne webGadget

Beitrag von broozar »

hallo allesamt,
sorry für die wahrscheinlich blöde frage, ich möchte daten (rohtext auf einer website) online abfragen und diese in einen string speichern, ohne über ein webGadget zu gehen. PB ist mein erster gehversuch in richtung basic, habe vorher mit php/python/lua und derartigem gearbeitet, das ist alles etwas neu für mich. vielen dank im voraus!
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: get http stuff ohne webGadget

Beitrag von STARGÅTE »

Das einfachste wäre:

Code: Alles auswählen

ReceiveHTTPFile(URL$, Dateiname$)
Einfach die URL angeben und den Datei-Speichername und dann kannst du diese Datei öffnen (ReadFile())
und den Quelltext Zeile für Zeile auslesen (ReadString())
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
broozar
Beiträge: 97
Registriert: 08.03.2010 15:53
Wohnort: Berlin
Kontaktdaten:

Re: get http stuff ohne webGadget

Beitrag von broozar »

danke, das habe ich auch im handbuch gesehen, aber geht es auch, ohne die datei zwischenzuspeichern?

ich suche das äquivalent zu pythons

Code: Alles auswählen

	f = urllib.urlopen(url, params)
	htmlSource = f.read()
	f.close()
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: get http stuff ohne webGadget

Beitrag von X360 Andy »

Code: Alles auswählen

InitNetwork()


; Lädt den Inhalt einer URL in einen String
Procedure.s DownloadToString(URL$, TimeOut=5000)
Protected Event, Time, Size, String$
Protected BufferSize = $1000
Protected *Buffer = AllocateMemory(BufferSize)
Protected ServerName$ = GetURLPart(URL$, #PB_URL_Site)
Protected ConnectionID = OpenNetworkConnection(ServerName$, 80)
If ConnectionID
  SendNetworkString(ConnectionID, "GET "+URL$+" HTTP/1.0"+#LFCR$+#LFCR$)
  Time = ElapsedMilliseconds()
  Repeat
   Delay(10)
   Event = NetworkClientEvent(ConnectionID)
  Until Event Or ElapsedMilliseconds()-Time > TimeOut
  If Event
   Repeat
    Size = ReceiveNetworkData(ConnectionID, *Buffer, BufferSize)
    String$ + PeekS(*Buffer, Size, #PB_Ascii)
   Until Not Size
   Inhalt = FindString(String$, #LFCR$, 1)
   If Inhalt
    ProcedureReturn Mid(String$,Inhalt+3)
   Else
    ProcedureReturn String$
   EndIf
  EndIf
EndIf
EndProcedure
Autor unbekannt
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: get http stuff ohne webGadget

Beitrag von STARGÅTE »

Autor unbekannt
ne ich ^^

Zu benutzten wäre es dann so:

Code: Alles auswählen

Inhalt$ = DownloadToString("http://data.unionbytes.de/ip.php")
Debug Inhalt$
Debugger hat geschrieben:84.188.197.188
Zuletzt geändert von STARGÅTE am 09.07.2010 15:52, insgesamt 1-mal geändert.
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
broozar
Beiträge: 97
Registriert: 08.03.2010 15:53
Wohnort: Berlin
Kontaktdaten:

Re: get http stuff ohne webGadget

Beitrag von broozar »

sehr cool, vielen dank!

#LFCR$ wird moniert, wahrscheinlich weil ich so ein demo-nutzer bin, die meldung kommt auch in den mitgelieferten examples von PB. (ich führe das programm derzeit in einer win2k virtualbox aus, ich denke, das ist nicht das Problem, oder?). die IDE schlägt mir #CRLF$ vor, was beim compilen aber auch nicht durchläuft.

habe versucht, #LFCR$ zu eliminieren, leider hängt die app 5s bis zum timeout und läuft dann normal weiter, ohne irgendetwas auszugeben.
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
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: get http stuff ohne webGadget

Beitrag von ts-soft »

Code: Alles auswählen

#LF = 10 ; LineFeed, Zeilenvorschub
#CR = 13 ; Carriage Return, Wagenrücklauf, Enter
#LF$ = Chr(#LF)
#CR$ = Chr(#CR)
#LFCR$ = #LF$ + #CR$
#CRLF$ = #CR$ + #LF$
broozar
Beiträge: 97
Registriert: 08.03.2010 15:53
Wohnort: Berlin
Kontaktdaten:

Re: get http stuff ohne webGadget

Beitrag von broozar »

die prozedur läuft nun in ihrem eigenen thread und blockt somit die hauptapp nicht mehr, was schön ist, aber nach 5s bekomme ich immer meine debug-zeile "timeout". #lf$ und co sind gefixed, danke.

PS: tolle community :) i love it

es geht jetzt... fast. den rest krieg ich selber raus. vielen Dank!
Zuletzt geändert von broozar am 08.03.2010 18:22, insgesamt 1-mal geändert.
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
broozar
Beiträge: 97
Registriert: 08.03.2010 15:53
Wohnort: Berlin
Kontaktdaten:

Re: get http stuff ohne webGadget

Beitrag von broozar »

ok, der letzte schritt fehlt mir. ich bekomm ein 302 "document has moved", aber über einen browser ist die seite problemlos erreichbar. auch wird nicht die adresse meines spaces im header zurückgegeben, sondern die des providers.
EDIT: http://guttgame.q-soft.ch/ip.php funktioniert, http://server.csis-game.net/scc.php erzeugt dieses 302. beide scripts sollten einfach nur die IP wiedergeben.
EDIT2: server scheint grad down zu sein, war aber auch ne gute möglichkeit, das timeout zu testen... was leider nicht korrekt arbeitet in diesem falle.
EDIT3: da der prozess bei mir sowieso in einem eigenen thread läuft, säge ich ihn einfach nach einer gewissen zeit ab, falls er noch aktiv ist. ist das so eigentlich eine gute idee?

Code: Alles auswählen

  If (ElapsedMilliseconds()-TimeMain > 5000) And (IsThread(ip_thread))
    KillThread (ip_thread)
meisten funktioniert es, manchmal hängt er jedoch immernoch fest, was ich komisch finde. nicht die app hängt, sondern er hängt im versuch der verbindungsherstellung ("connecting...") und der thread wird trotzdem nicht abgesägt. die interpretation von 5000ms ist auch sehr frei manchmal... kann ich das unter VirtualBox abbuchen, läuft da was in meinem programm schief oder ist PBs interpretation von zeit in verbindung mit einem WaitWindowEvent() von natur aus "frei"...
iMac 27" quad i7 radeon 4850 8gig ram
PB 4.4 in parallelsVM @ 2 cores 3072megs ram 32megs vram win7
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: get http stuff ohne webGadget

Beitrag von HeX0R »

Wenn es dir nur um deine externe IP geht, da gibt's jede Menge Stuff hier im Board.

Hier z.B. ein Zweizeiler.
Antworten