Forum: PC-Programmierung ein Client aufbauen für http


von christian (Gast)


Lesenswert?

Hi,

Ich würde gerne eine Client Implementierung (in C )aufbauen
um  http-requests an einen Server zu senden.
Wie kann ich das realisieren wenn meine Verbindung
ins Internet über einen Proxy läuft.

Was ich bisher getestet habe funktioniert so nicht.
(wegen Proxy?)

normale Struktur aufbauen:

remote = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in *));
remote->sin_family = AF_INET;

//ip hole ich über gethostbyname funktioniert!
tmpres = inet_pton(AF_INET, ip, (void*)(&(remote->sin_addr.s_addr)));

//wie muss ich PORT setzen?- Proxy sendet über 8181
remote->sin_port = htons(PORT);
...
 if(connect(sock, (struct sockaddr *)remote, sizeof(struct sockaddr)) < 
0){
          perror("Could not connect");
          exit(1);
        }
...
Der connect Aufruf scheitert dann mit der Fehlermeldung:
"Could not connect: No route to host"

Als ip Adresse nehme ich dann als Kommandozeilenargument z.b.
"http://www.google.de";
Oder braucht der Client die URL des Proxies?

Habe noch keine Erfahrung mit Client/Server Struktur über
Proxy laufend.Vielleicht muss der Client grundsätzlich
anders aufgebaut werden?

Danke für jede Hilfe

von Peter (Gast)


Lesenswert?

du brauchst nur die IP von dem Proxy. Dann baust du eine verbindung zum 
Proxy auf und sagt ihm per "GET HTTP ..." welche Zeite du brauchst und 
schon bekommst du sie.

Aber wenn du dich erst am Proxy anmelden musst, dann wird es wesentlich 
komplizierter. Dann ist es besser einen fertigen httpclient zu 
verwenden.

von christian (Gast)


Lesenswert?

Ja,eine Proxy authentifizierung wäre notwendig.
Ich  dachte sowas geht einzubauen via Proxy-Authorization.
Bisher sende ich sowas:

 char *tpl = "GET /%s HTTP/1.0\r\nHost: %s\r\nUser-Agent: %s\r\n\r\n";

Wie könnte man das mit authentifizierung realisieren?

Muss ich den die Proxy-IP in meine Struktur einfügen?
Wie übergebe ich dann die gesuchte URL(z.b.google).

von Εrnst B. (ernst)


Lesenswert?

Du verbindest an den Proxy (deine Sockaddr enthält die Proxy-IP) und 
schickst dem ein GET mit URL und Host.

Der Proxy schickt eine Fehlermeldung zurück (AUTHORIZATION REQUIRED), 
und teilt dir in den Headers mit, in welchem Format er gerne das 
Passwort hätte.

Request nochmal schicken, diesmal mit Passwort in den Headers => Fertig.

Die Passwort-"Verschlüsselungs"-Funktion kann dabei von richtig Simpel 
(Base64 und Fertig) bis bösartig kompliziert (NTLM) sein, musst halt 
schauen was dein Proxy da akzeptiert.

Für die Details schau dir bitte die RFC's dazu an, das alles hier 
haarklein vorzukauen ist etwas mühsam.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.