Получите ответ http для URL в переполнении стека

Я хочу просто получить ответ HTTP или просто пройти / не пройти для URL в C ++

Что-то вроде вызова AJAX, который я использую в JavaScript

$.ajax({
url: "http://www.google.com",
dataType: "html",
timeout: 4 * 1000
}).done(function() {

})
.fail(function() {

});

Половина решений кажется мне слишком запутанной. В поисках более простого пути.

-1

Решение

Вы можете посмотреть на CPR библиотека:

auto response = cpr::Get // or cpr::Head
(
cpr::Url{"http://www.google.com"},
cpr::Header{{"accept", "text/html"}},
cpr::Timeout{4 * 1000}
);

if(response.status_code != 200)
{
// fail
}
0

Другие решения

Посмотри на Libcurl, например:

#include <curl/curl.h>

CURL *c = curl_easy_init();
if (!c)
{
...
}
else
{
struct curl_slist *headers = curl_slist_append(NULL, "Accept: text/html");

curl_easy_setopt(c, CURLOPT_URL, "http://www.google.com");
curl_easy_setopt(c, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(c, CURLOPT_TIMEOUT, 4 * 1000);
curl_easy_setopt(c, CURLOPT_NOBODY, 1);

CURLcode res = curl_easy_perform(c);
curl_slist_free_all(headers);

if (res != CURLE_OK)
{
...
}
else
{
long responseCode;
curl_easy_getinfo(c, CURLINFO_RESPONSE_CODE, &responseCode);

...
}

curl_easy_cleanup(c);
}
0

В некоторых случаях я использовал HappyHTTP, так как это маленький и простой в использовании. Это несколько ограничено, но в зависимости от того, что вам нужно, можно выполнить работу.

Я немного изменил их пример программы, чтобы дать вам представление о том, как использовать ее в своих целях:

// invoked when response headers have been received
void OnBegin( const happyhttp::Response* r, void* userdata )
{
*userdata = r->getstatus();
}

// invoked to process response body data (may be called multiple times)
void OnData( const happyhttp::Response* r, void* userdata, const unsigned char* data, int n )
{

}

// invoked when response is complete
void OnComplete( const happyhttp::Response* r, void* userdata )
{

}void TestGET()
{
int returnStatus;
happyhttp::Connection conn( "www.google.com", 80 );
conn.setcallbacks( OnBegin, OnData, OnComplete, &returnStatus );

conn.request( "GET", "/" );

while( conn.outstanding() ) conn.pump();

if (returnStatus != 200) printf("FAIL");
else printf("OK");
}

Чтобы заставить его работать на VS2015, вы можете использовать следующее ленивое решение: добавьте следующее в начало happyhttp.cpp.

#ifdef WIN32
#pragma comment(lib, "ws2_32.lib")
#define strcasecmp _stricmp
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
0
По вопросам рекламы [email protected]