2016-08-01 29 views
-1

所以,我想知道是否有可能(最有可能沒有使用的庫)閱讀原始粘貼/或更好地說一個網站的HTML代碼使用C + +。我發現的所有代碼/教程都不是很有用,所以我想知道你們中的一些人能否幫助我。我想讀的這個鏈接:閱讀原始粘貼在C++

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

的代碼似乎在尋找什麼即時的,但我在想念着網絡和HTTP類...

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這是我得到的編碼!

希望有人能幫助我在即時搜索這一點,因爲可以由xD

+0

的可能的複製[下載網址在C++](HTTP://計算器。 com/questions/1129194/download-a-url-in-c) – thirtythreeforty

回答

0

您正在尋求一種可能的解決方案,而無需使用任何庫。此解決方案使用庫但相對容易:

下載libcurl並在Visual Studio中打開libcurl.sln。選擇你想要的任何配置(調試或釋放,靜態或動態等),以及是否需要32位或64位,並構建它。完成構建後,請閱讀Visual Studio中的編譯器輸出以查看它創建的.lib文件的位置。剪切該lib文件,然後在名爲「curl」的源代碼之外的某處創建一個新文件夾,然後在名爲「lib」的文件夾內創建一個文件夾,並將該庫粘貼到那裏。然後,返回到源代碼文件夾,並將整個包含文件夾複製到curl文件夾。

現在,在確定包含了庫之後,現在可以對其進行測試了。創建一個新的Visual Studio項目,而這個源代碼複製到主CPP文件:

#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; 
} 

結果:

<!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

我似乎明白,你想從我和我下載最新版本的lib,但在.tar.gz中有這麼多.sln項目和idk什麼使用可以給我一個更詳細的教程創建.lib或發送給我你的,因爲一切似乎是我需要:) thx很多 – Dafuqisthis

+0

當然。 [**此鏈接**](http://www.cplusplus.com/forum/windows/173738/)是我如何學習它,並使其工作。討論從非常普遍的問題開始,但隨後開始(發佈:2015年9月24日下午3點36分 用戶Wyboth),以獲得關於「如何包含LibCurl_」的具體信息。然後我成功編譯了一個「URL源代碼獲取器」功能。所以祝你好運:) –

+0

我也可以給你我使用的版本,如果這不適合你。讓我知道它是如何去的,我會幫助你。我知道在VS中包含東西時會有多少令人沮喪的! –