2016-08-01 30 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中包含东西时会有多少令人沮丧的! –