Чтение из необработанной пасты в c ++

Итак, мне было интересно, можно ли (скорее всего, без использования библиотеки) прочитать необработанную пасту / или, лучше сказать, HTML-код веб-сайта с использованием C ++. Все коды / руководства, которые я нашел, не были действительно полезными, поэтому мне было интересно, могут ли некоторые из вас мне помочь. Я хочу прочитать об этой ссылке:

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

этот код кажется тем, что я ищу, но мне не хватает класса Network и 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 Чтение текста с URL-адреса это сообщение, которое я получил кодирование из!

Надеюсь, кто-нибудь может помочь мне, я ищу это, так как xD


person Dafuqisthis    schedule 01.08.2016    source источник
comment
Возможный дубликат Загрузить URL-адрес на C ++   -  person George Hilliard    schedule 01.08.2016


Ответы (2)


Просто используйте простой HTTP-запрос GET для вашего сокета:

GET /raw/93HGpGG0 HTTP/1.1\r\nHost: www.pastebin.com\r\n\r\n

Вы можете использовать библиотеку сокетов Boost, а также POSIX или winsock для создания сокета без какой-либо библиотеки:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms737591%28v=vs.85%29.aspx.

http://www.linuxhowtos.org/C_C++/socket.htm

person MHz Code    schedule 01.08.2016

Вы просите возможное решение без использования каких-либо библиотек. В этом решении используется библиотека, но это относительно просто:

Загрузите libcurl и откройте libcurl.sln в Visual Studio. Выберите любую конфигурацию, которую вы хотите (отладочную или выпускную, статическую или динамическую и т. Д.) И хотите ли вы 32-битную или 64-битную версию, и создайте ее. После завершения сборки прочтите вывод компилятора в Visual Studio, чтобы узнать, где он создал ваш .lib файл. Вырежьте этот файл lib, затем создайте новую папку где-нибудь за пределами исходного кода с именем «curl», а внутри этого файла создайте папку с именем «lib» и вставьте туда библиотеку. Затем вернитесь в папку с исходным кодом и скопируйте всю папку include в папку 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>
person Khalil Khalaf    schedule 01.08.2016
comment
Кажется, я понимаю, чего вы от меня хотите, и я загрузил последнюю версию lib, но в .tar.gz так много проектов .sln и idk, что использовать, не могли бы вы дать мне более подробное руководство по созданию .lib или пришлите мне свой, потому что все остальное кажется мне тем, что мне нужно :) thx alot - person Dafuqisthis; 01.08.2016
comment
Конечно. Эта ссылка - вот как я ее узнал и получил работать. Обсуждение начинается с очень общего вопроса, но затем началось (Сообщение: 24 сентября 2015 г., 15:36, пользователем Wyboth), чтобы уточнить только Как включить LibCurl. Затем я успешно скомпилировал средство получения исходного кода URL. функция. Удачи :) - person Khalil Khalaf; 01.08.2016
comment
Я также могу отправить вам версию, которую использовал, если вам это не помогло. Просто дайте мне знать, как это происходит, и я помогу вам. Я знаю, как сильно расстраивает включение каких-либо вещей в VS! - person Khalil Khalaf; 01.08.2016
comment
Господи, это выглядит сложно ... почему это всегда должно быть сложно ... - Может, у тебя есть Skype или что-то в этом роде, или ты мог бы прислать мне свой файл .lib !? - person Dafuqisthis; 01.08.2016