В некоторых случаях я использовал 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
Что вы найти так трудно о [ 'getaddrinfo'] (http://manpages.courier-mta.org/htmlman3/getaddrinfo.3.html)(), а затем [' socket'] (HTTP : //manpages.courier-mta.org/htmlman2/socket.2.html)(), затем ['connect'] (http://manpages.courier-mta.org/htmlman2/connect.2.html) (), затем ['write'] (http://manpages.courier-mta.org/htmlman2/write.2.html)() и, наконец, [' read'] (http: //manpages.courier-mta. орг/htmlman2/read.2.html)()? –
Я согласен @SamVarshavchik больше методов = меньше ошибок, и более конкретно –
@SamVarshavchik Я явно не нашел примера, чистив веб-версию, которая выдвинула это решение. Я посмотрю на него –