Я хочу просто получить ответ HTTP или просто пройти / не пройти для URL в C ++
Что-то вроде вызова AJAX, который я использую в JavaScript
$.ajax({
url: "http://www.google.com",
dataType: "html",
timeout: 4 * 1000
}).done(function() {
})
.fail(function() {
});
Половина решений кажется мне слишком запутанной. В поисках более простого пути.
Вы можете посмотреть на 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
}
Посмотри на 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);
}
В некоторых случаях я использовал 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