2016-08-01 14 views
-1

Also, ich frage mich, ob es möglich ist (höchstwahrscheinlich ohne die Verwendung einer Bibliothek), die rohe Paste zu lesen/oder sagen Sie besser den HTML-Code einer Website mit C++. Alle Codes/Tutorials, die ich fand, waren nicht wirklich hilfreich, also habe ich mich gefragt, ob einige von euch mir helfen könnten. Ich möchte von dieser Verbindung lesen:Lesen von Rohpaste in C++

http://pastebin.com/raw/93HGpGG0

dass Code scheint zu sein, was für im suchen, aber im Netzwerk und Http Klasse fehlt ...

bool Http::Connect(YString addr) 
{ 
    _socket = Network::CreateConnectSocket(addr, 53); // 53 is the port 
    return _socket != INVALID_SOCKET; 
} 
int iResult; 
SOCKET ConnectSocket = INVALID_SOCKET; 

// holds address info for socket to connect to 
struct addrinfo *result = NULL, 
    *ptr = NULL, 
    hints; 

ZeroMemory(&hints, sizeof(hints)); 
hints.ai_family = AF_UNSPEC; 
hints.ai_socktype = SOCK_STREAM; 
hints.ai_protocol = IPPROTO_TCP; //TCP connection!!! 

            //resolve server address and port 
iResult = getaddrinfo(addr.c_str(), std::to_string(port).c_str(), &hints, &result); 
if (iResult != 0) 
{ 
    printf("Network::CreateSocket failed with %s as addr, and %i as port.\nError code: %i.\n", (char*)addr.c_str(), port, iResult); 
    return INVALID_SOCKET; 
} 

for (ptr = result; ptr != NULL; ptr = ptr->ai_next) { 

    // Create a SOCKET for connecting to server 
    ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); 

    if (ConnectSocket == INVALID_SOCKET) { 
     printf("Network::CreateSocket failed with error: %ld\n", WSAGetLastError()); 
     return INVALID_SOCKET; 
    } 

    // Connect to server. 
    iResult = connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen); 

    if (iResult == SOCKET_ERROR) 
    { 
     closesocket(ConnectSocket); 
     ConnectSocket = INVALID_SOCKET; 
     printf("Network::CreateSocket failed the server is down... did not connect.\n"); 
    } 
} 

freeaddrinfo(result); 

if (ConnectSocket == INVALID_SOCKET) 
{ 
    printf("Network::CreateSocket failed.\n"); 
    return INVALID_SOCKET; 
} 

u_long iMode = 1; 
iResult = ioctlsocket(ConnectSocket, FIONBIO, &iMode); 
if (iResult == SOCKET_ERROR) 
{ 
    printf("Network::CreateSocket ioctlsocket failed with error: %d\n", WSAGetLastError()); 
    closesocket(ConnectSocket); 
    return INVALID_SOCKET; 
} 
char value = 1; 
setsockopt(ConnectSocket, IPPROTO_TCP, TCP_NODELAY, &value, sizeof(value)); 
return ConnectSocket; 

Winsock 2 Reading text from a URL diese war der Post, ich habe die Codierung von!

Hoffentlich kann mir jemand für diese Suche im aushelfen, da mit Ihrer Steckdose

+0

Mögliche Duplikat [Laden Sie eine URL in C++] (http: // Stackoverflow. com/questions/1129194/download-a-url-in-c) – thirtythreeforty

Antwort

0

Sie fragen nach einer möglichen Lösung ohne Verwendung von Bibliotheken. Diese Lösung verwendet eine Bibliothek, aber es ist relativ einfach:

Herunterladen libcurl und offenes libcurl.sln in Visual Studio. Wählen Sie die gewünschte Konfiguration (Debuggen oder Freigeben, statisch oder dynamisch usw.) und ob Sie 32-Bit oder 64-Bit möchten und erstellen Sie sie. Sobald es fertig baut, lesen Sie die Compiler-Ausgabe in Visual Studio, um zu sehen, wo es Ihre .lib Datei erstellt hat. Schneiden Sie diese lib-Datei aus, erstellen Sie einen neuen Ordner irgendwo außerhalb des Quellcodes mit dem Namen "curl" und erstellen Sie einen Ordner innerhalb des namens "lib", und fügen Sie die Bibliothek dort ein. Gehen Sie dann zurück zum Quellcode-Ordner und kopieren Sie den gesamten Include-Ordner in den Curl-Ordner.

Jetzt, und nachdem Sie sichergestellt haben, dass Sie die Bibliothek hinzugefügt haben, ist es Zeit, es zu testen. Erstellen Sie ein neues Visual Studio-Projekt, und kopieren Sie diesen Quellcode in die Haupt-CPP-Datei:

#include <stdio.h> 
#include <curl/curl.h> 

int main(void) 
{ 
    CURL *curl; 
    CURLcode res; 

    curl = curl_easy_init(); 
    if (!curl) { return -1; } 

    curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); 

    /* example.com is redirected, so we tell libcurl to follow redirection */ 
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 

    /* Perform the request, res will get the return code */ 
    res = curl_easy_perform(curl); 

    /* Check for errors */ 
    if (res != CURLE_OK) 
    { 
     fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); 
    } 

    /* always cleanup */ 
    curl_easy_cleanup(curl); 
    return 0; 
} 

Ergebnis:

<!doctype html> 
<html> 
<head> 
<title>Example Domain</title> 

<meta charset="utf-8" /> 
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
<meta name="viewport" content="width=device-width, initial-scale=1" /> 
<style type="text/css"> 
body { 
background-color: #f0f0f2; 
margin: 0; 
padding: 0; 
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; 

} 
div { 
width: 600px; 
margin: 5em auto; 
padding: 50px; 
background-color: #fff; 
border-radius: 1em; 
} 
a:link, a:visited { 
color: #38488f; 
text-decoration: none; 
} 
@media (max-width: 700px) { 
body { 
background-color: #fff; 
} 
div { 
width: auto; 
margin: 0 auto; 
border-radius: 0; 
padding: 1em; 
} 
} 
</style> 
<script type="text/javascript" src="http://gc.kis.scr.kaspersky-labs.com/1B74BD89-2A22-4B93-B451-1C9E1052A0EC/main.js" charset="UTF-8"></script><script type="text/javascript" src="http://gc.kis.scr.kaspersky-labs.com/1B74BD89-2A22-4B93-B451-1C9E1052A0EC/main.js" charset="UTF-8"></script></head> 

<body> 
<div> 
<h1>Example Domain</h1> 
<p>This domain is established to be used for illustrative examples in documents. You may use this 
domain in examples without prior coordination or asking for permission.</p> 
<p><a href="http://www.iana.org/domains/example">More information...</a></p> 
</div> 
</body> 
</html> 
+0

ich scheine zu verstehen, was Sie von mir wollen und ich habe die neueste Version von lib heruntergeladen, aber in der .tar.gz sind so viele .sln-Projekte und idk was zu verwenden, könntest du mir eine detailliertere Anleitung zum Erstellen der .lib geben oder mir deine schicken, weil alles andere scheint, was ich brauche :) thx alot – Dafuqisthis

+0

Sicher. [** Dieser Link **] (http://www.cplusplus.com/forum/windows/173738/) ist, wie ich es gelernt habe und es zum Funktionieren gebracht habe. Die Diskussion beginnt als sehr allgemeine Frage, aber begann dann (Post: 24. September 2015 um 03.36 Uhr von Benutzer 'Wyboth'), um genau zu bekommen" _Wie LibCurl_ einzuschließen "Dann habe ich erfolgreich einen" URL Source Code Getter "kompiliert Funktion. So viel Glück :) –

+0

Ich kann dir auch die Version schicken, die ich benutzt habe, wenn das für dich nicht funktioniert hat. Sag mir einfach wie es geht und ich werde dir helfen. Ich weiß, wie frustrierend es ist, Sachen in VS zu integrieren! –