我想简单地在C ++中获取HTTP响应或简单传递/失败
类似于我在JavaScript中使用的AJAX调用
$.ajax({
url: "http://www.google.com",
dataType: "html",
timeout: 4 * 1000
}).done(function() {
})
.fail(function() {
});
我认为解决方案的一半似乎太复杂了。寻找一种更简单的方法。
答案 0 :(得分:0)
您可能需要查看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
}
答案 1 :(得分: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);
}
答案 2 :(得分: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