2016-03-26 16 views
-3

Ich versuche getaddrinfo zu verwenden, indem ich ihm das Präfix http (s) gebe und es den Host nicht korrekt nachschlägt. Wie kann ich das Problem beheben? Ich möchte https://www.google.com nachschlagen, aber die gai_strerror() gibt "Kein solcher Host ist bekannt" zurück, es funktioniert in Ordnung für www.google.com auf Port 80.c getaddrinfo no kein solcher Host ist bekannt

Dies ist ein Teil des Codes, den ich für die getaddrinfo() verwende Teil:

// The GET request I pose to download the webpage 
char *send_buf="GET/\r\n"; 

// i tried three different urls apparently changing the value in the 
// value in the variable in my code, it only works for 'www.google.com' 
const char *URL="https://www.google.com"; 
const char *URL="http://www.google.com"; 
const char *URL="www.google.com"; 

if((status=getaddrinfo(URL, PORT, &hints, &res))!=0) 
{ 
    printf("%s\n", gai_strerror(status)); 
    exit(1); 
} 

ich versuche, die Webseite mit winsock2 zum herunterladen und wenn ich www.google.com verwenden, es gibt mir eine 302 Verschoben Nachricht und ich möchte die eigentliche Webseite herunterladen, ohne eine externe Verwendung Bibliotheken.

Antwort

2

Sie müssen entweder die IP-Adresse oder den Hostnamen des gewünschten Hosts angeben. Wenn Sie einen Hostnamen angeben, wird dieser in die entsprechende IP-Adresse konvertiert. Ein Hostname sollte nur in diesem Formular enthalten sein: "www.example.domain_name". Nicht enthalten "http://" oder "https://". Dies ist eine Eigenschaft der URL, die den Hostnamen enthält, sie ist nicht Teil des Hostnamens selbst.

Um den HTML-Code für https://www.google.com herunterzuladen, müssen Sie für www.google.com die IP-Lookup, dann zu dieser IP auf Port 443 (dem Standard-HTTPS-Port) zu verbinden, dann eine SSL/TLS-Verschlüsselung Sitzung verhandeln, und dann schließlich eine HTTP senden GET Anfrage für das / Dokument.

Es ist nicht sinnvoll, die SSL/TLS-Verschlüsselung von Hand zu implementieren. Verwenden Sie eine Bibliothek wie OpenSSL oder Microsoft CryptoAPI über Ihrem vorhandenen Socket-Code. Alternativ können Sie keine Socket-APIs direkt verwenden. Verwenden Sie eine HTTP/S-Bibliothek, z. B. WinInet/WinHTTP API von Microsoft oder eine Bibliothek wie libcurl, um alle Details für Sie zu verarbeiten.

+0

dann wie kann ich die html der website herunterladen? seit google.com gibt mir eine 302 bewegte Antwort – demogorgon

+0

Wenn Sie 302 Antwort erhalten haben, dann können Sie diesen Link [http://www.checkupdown.com/status/E302.html](http://www.checkupdown. com/status/E302.html) um Ihren Fehler zu beheben. – Shiv

+0

War dies hilfreich .. – Shiv

Verwandte Themen