[gelöst] Fragen zu HttpProxy()

Für allgemeine Fragen zur Programmierung mit PureBasic.
MenschMarkus
Beiträge: 220
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

[gelöst] Fragen zu HttpProxy()

Beitrag von MenschMarkus »

Hallo zusammen und wünsche noch ein frohes Weihnachten gehabt zu haben.

Ich benötige mal wieder einen Anschubser zum Thema HTTP, insbesondere wenn ein Proxy mit im Spiel ist.
Kurze Problembeschreibung:
Ich nutze für den Kontakt zu meinem Server ein HttpRequest(). Das funktioniert auch vollkommen problemlos. Jetzt ist die Situation aufgetreten bei der ein User einen Proxy vorgeschaltet hat. Laut Aussage des IT Administrators sind direkte TCP Verbindungen über den Port 443 (https) nicht erlaubt. Daraus folgere ich, dass der HttpRequest() Befehl nicht über Http läuft, sondern direkt eine Verbindung via TCP zu meinem Server aufbaut. Eine generelle Freigabe des Ports 443 ist aus Sicherheitsgründen nicht realisierbar. Dieses Problem hätte ich gerne gelöst.

Hier meine Gedanken zum Lösungsansatz. (rein fachlich theoretisch erst einmal)
Seit der Version 5.6 bietet PB ja den Befehl HttpProxy() um diesem Problem Herr zu werden. Für mich als eher FrontEnd Programmierer ist die Hilfe nicht ganz so hilfreich bzw. ich bin mir nicht sicher ob ich das alles auch so richtig verstanden habe.

Hier mal eine Beschreibung wie ich HttpProxy() verstehe:
  1. Laut der Hilfe brauche ich den Befehl HttpProxy() lediglich vor meiner eigentlichen Abfrage wie in meinem Falle HttpRequest() vor zu setzen.
  2. In der Klammer muss lediglich angegeben werden wie der Proxy zu erreichen ist. so sind
    1. HttpProxy("http://",[<benutzer>,<passwort>])
    2. HttpProxy("https://",[<benutzer>,<passwort>])
      eine Nutzungen dieses Befehls.
      Die Nutzung von
    3. HttpProxy("socks4://",[<benutzer>,<passwort>])
    4. HttpProxy("socks5://",[<benutzer>,<passwort>])
      (nebst Varianten) benötigt entsprechende Protokolle.
  3. ANNAHME: Der vorgelagerte Befehl HttpProxy() wandelt die eigentliche HttpRequest() Anfrage entsprechend so um, dass der Proxy diese dann aufnehmen und weiter verarbeiten kann
  4. FRAGE: Muss HttpProxy() vor jedem HttpRequest() Aufruf plaziert werden damit dieser auch wirksam ist?
  5. FRAGE: Muss bei socks4/socks5 immer eine IP Adresse (Domainname) mit angegeben werden?
  6. FRAGE: Muss auch bei HttpProxy("http://") eine IP Adresse folgen?
  7. FRAGE: Wie wird ein Port in der HttpProxy() Anfrage gehandelt?
Soweit einmal die ersten Fragen. Ich hoffe weiteres klärt sich für mich dann von selbst.
Danke schon einmal für Eure hilfreichen Kommentare und Antworten.
Es bleibt mir noch Euch allen einen guten Start in das Jahr 2022 zu wünschen.

LG
menschmarkus
Zuletzt geändert von MenschMarkus am 03.02.2022 11:55, insgesamt 1-mal geändert.
Wissen schadet nur dem, der es nicht hat !
MenschMarkus
Beiträge: 220
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Fragen zu HttpProxy()

Beitrag von MenschMarkus »

Mittlerweile habe ich mal etwas herumprobiert.
folgender Code erzeugt einen Fehler

Code: Alles auswählen

initnetwork()
HTTPProxy("http://")
httpreq = HTTPRequest(#PB_HTTP_GET,"https://google.com","",#PB_HTTP_Asynchronous)
if httpreq
  Repeat
    progress = HTTPProgress(httpreq)
    Select progress
      case #PB_HTTP_Failed
        debug HTTPInfo(httpreq,#PB_HTTP_Errormessage)
        break
      case #PB_HTTP_Success
        break
    Endselect
  Forever
Endif
Da ich keinen Proxy einsetze hätte ich erwartet, dass die Fehlermeldung darauf hinweist, dass keine Verbindung mit dem Proxy hergestellt werden kann. Jedoch erhalte ich die Fehlermeldung "Unsupportet proxy Syntax in 'http://' ". Das deutet aber auf einen Syntax Fehler hin.
In der Hilfe steht, dass HTTPProxy() auch für HTTPRequest() eingesetzt werden kann.
Wo ist denn da der Fehler?
Steckt der Fehler im Code oder ist die Fehlermeldung nicht korrekt?
Hat da jemand eine Antwort ?
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
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: Fragen zu HttpProxy()

Beitrag von NicTheQuick »

Ich kann dir leider nicht besonders viel weiterhelfen, weil ich das mit Purebasic selbst noch nie gemacht habe und es bei mir bisher auch nie nötig war. Es geht aber wohl um einen SOCKS-Proxy. In der Regel ist so ein HTTP-Proxy ein Server im selben Intranet, über den alle HTTP(S)-Anfragen geroutet werden. Dieser Proxy hat natürlich auch einen Hostnamen oder eine IP und einen Port. Und die meisten sind dann auch nochmal mit einem Nutzername und Passwort abgesichert. So kann die Firewall im Proxy für jeden Nutzer anders eingestellt werden, sodass der eine zum Beispiel auf google.de darf, ein anderer aber nicht
"http://" alleine reicht deswegen also nicht. Da muss schon mehr stehen.

Durch einen reinen SOCKS-Proxy kannst du alle möglichen Datenverbindungen "proxien". Ein HTTP-Proxy lässt in der Regel nur HTTP oder HTTPS-Verbindungen zu, sprich Port 80 und port 443. Aber muss auch nicht unbedingt so sein.

Im Endeffekt muss der Administrator deines Kunden wissen wie der SOCKS-Proxy angesprochen werden muss und was du HTTProxy() als Parameter übergeben musst. Eigentlich musst du dir gar nicht so viele Gedanken darüber machen. Gib deinem Kunden ein Freifeld für URL, User und Passwort und übergibt das einfach HTTPProxy() und fertig.
Bild
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Fragen zu HttpProxy()

Beitrag von HeX0R »

Hiermit kannst Du SOCKS4 und SOCKS5 testen, HTTP geht irgendwie nicht (mehr).
Testen heisst: Das Ding arbeitet als Proxy

Hab ich offensichtlich 2006 "verbrochen"

Ach ja, SOCKS4 unterstützt nur IPs! Und auch nur IPv4

Testcode, falls der Proxy auf SOCKS4 gestellt ist, auf dem selben Rechner läuft, auf Port 9300 horcht und Username aaa ist:

Code: Alles auswählen

InitNetwork()
HTTPProxy("socks4://127.0.0.1:9300", "aaa", "")
HttpRequest = HTTPRequest(#PB_HTTP_Get, "https://www.google.com")
If HttpRequest
	Debug "StatusCode: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
	Debug "Response: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
	
	FinishHTTP(HTTPRequest)
Else
	Debug "Request creation failed"
EndIf
MenschMarkus
Beiträge: 220
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: Fragen zu HttpProxy()

Beitrag von MenschMarkus »

NicTheQuick hat geschrieben: 24.01.2022 18:03Ich kann dir leider nicht besonders viel weiterhelfen
Jede Information hilft immer weiter, irgendwie :wink:
NicTheQuick hat geschrieben: 24.01.2022 18:03Im Endeffekt muss der Administrator deines Kunden wissen wie der SOCKS-Proxy angesprochen werden muss und was du HTTProxy() als Parameter übergeben musst. Eigentlich musst du dir gar nicht so viele Gedanken darüber machen. Gib deinem Kunden ein Freifeld für URL, User und Passwort und übergibt das einfach HTTPProxy() und fertig.
Ja, der Admin sollte wissen welche Proxy Einstellungen er benötigt. Nur teste ich gerne meinen Code und möchte verstehen was mein Programm da so machen soll. Also zumindest etwas über die Oberfläche hinaus. Ferner mag ich mein Programm gerne testen und technische Fehler beseitigen bevor ich es auf die Welt loslasse. Also, mach ich mir die Arbeit und hinterfrage Dinge bis zu einem gewissen Grad.
Also, Danke für Deinen Post.
HeX0R hat geschrieben: 24.01.2022 21:58 Hiermit kannst Du SOCKS4 und SOCKS5 testen, HTTP geht irgendwie nicht (mehr).
Testen heisst: Das Ding arbeitet als Proxy
Ach HeXOR, was soll ich nur ohne Dich machen. Zum Testen ist Dein Verbrechen aus 2006 genial gut geeignet.
Vielen Dank dafür.

Stellt sich mir noch eine vorerst letzte Frage:
Reicht es aus HTTPProxy() einmalig im Programm aufzurufen oder muss das nach einem FinischHTTP() erneut angestossen werden?
Wissen schadet nur dem, der es nicht hat !
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Fragen zu HttpProxy()

Beitrag von TroaX »

Ja, der Admin sollte wissen welche Proxy Einstellungen er benötigt. Nur teste ich gerne meinen Code und möchte verstehen was mein Programm da so machen soll. Also zumindest etwas über die Oberfläche hinaus. Ferner mag ich mein Programm gerne testen und technische Fehler beseitigen bevor ich es auf die Welt loslasse. Also, mach ich mir die Arbeit und hinterfrage Dinge bis zu einem gewissen Grad.
Ist auch die richtige Einstellung. Leider entwickelt sich allgemein die Software-Entwicklung in eine andere Richtung. Man muss ja nicht immer alles bis ins kleinste Detail wissen. Aber wenn am Ende wirklich alles wegabstrahiert wird, wie es oftmals der Fall ist, dann muss man sich schon fragen, wer überhaupt noch Verantwortung für sein Werk übernehmen kann.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Fragen zu HttpProxy()

Beitrag von HeX0R »

MenschMarkus hat geschrieben: 26.01.2022 11:08 Stellt sich mir noch eine vorerst letzte Frage:
Reicht es aus HTTPProxy() einmalig im Programm aufzurufen oder muss das nach einem FinischHTTP() erneut angestossen werden?
Ganz ehrlich?
Keine Ahnung!
HttpProxy() musste ich bisher nie nutzen, ich würde empfehlen es einfach mal auszuprobieren.
MenschMarkus
Beiträge: 220
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: Fragen zu HttpProxy()

Beitrag von MenschMarkus »

Abschließend folgende Erfahrungswerte

Antworten auf Fragen aus meinem ersten Beitrag
1. Die Annahme ist korrekt
2. Die Annahme ist korrekt. Es ist aber darauf zu achten, wenn ein User angegeben ist aber kein PW muss das PW Feld mit einem "" gefüllt werden
3. Die Annahme ist korrekt.
4. Nein, es reicht ein einmaliger Aufruf von HTTPProxy() im Programm
5. Ja. Ohne diese Angaben weiß das Programm nicht wohin es die HTTP Anfrage senden soll. Die Angaben IP und Port werden vom Proxy vorgegeben
6. Da muss ich passen, da der HTTPProxy(HTTP://) immer in eine Fehlermeldung läuft
7. Der Port wird wie bei HTTP üblich mit einem : von der IP Adresse angehängt (127.0.0.1:12345)

Ich denke damit wäre dieses Thema erst einmal abgehandelt.

LG
menschmarkus
Wissen schadet nur dem, der es nicht hat !
Antworten