using neon (an HTTP and WebDAV client library, with a C interface)
see how to use GET / PUT / POST in some (not-so-perfect) examples
headers
#include <ne_session.h> #include <ne_request.h> #include <ne_utils.h> #include <ne_uri.h>
GET
int httpResponseReader(void *userdata, const char *buf, size_t len)
{
string *str = (string *)userdata;
str->append(buf, len);
return 0;
}
int do_get(string host)
{
ne_session *sess;
ne_request *req;
string response;
ne_sock_init();
sess = ne_session_create("http", host.c_str(), 80);
ne_set_useragent(sess, "MyAgent/1.0");
req = ne_request_create(sess, "GET", "/SomeURL/method?with=parameter&value=data");
// if accepting only 2xx codes, use "ne_accept_2xx"
ne_add_response_body_reader(req, ne_accept_always, httpResponseReader, &response);
int result = ne_request_dispatch(req);
int status = ne_get_status(req)->code;
ne_request_destroy(req);
string errorMessage = ne_get_error(sess);
ne_session_destroy(sess);
printf("result %d, status %d\n", result, status);
cout << response << "\n";
switch (result) {
case NE_OK:
break;
case NE_CONNECT:
throw ConnectionError(errorMessage);
case NE_TIMEOUT:
throw TimeOutError(errorMessage);
case NE_AUTH:
throw AuthenticationError(errorMessage);
default:
throw AnotherWebError(errorMessage);
}
return 0;
}
PUT/POST
int do_put(string data, string host, string url) {
ne_session *sess;
ne_request *req;
string response;
ne_sock_init();
sess = ne_session_create("http", host.c_str(), 80);
ne_set_useragent(sess, "MyUserAgent/1.0");
req = ne_request_create(sess, "PUT", url.c_str());
ne_add_request_header(req, "Content-type", "text/xml");
ne_set_request_body_buffer(req, data.c_str(), data.size());
int result = ne_request_dispatch(req);
int status = ne_get_status(req)->code;
ne_request_destroy(req);
string errorMessage = ne_get_error(sess);
ne_session_destroy(sess);
// just print result & status
printf("result %d, status %d\n", result, status);
return 0;
}
note: when using with VC9, have to specify “Ws2_32.lib libneon.lib” as Additional deps in Linker (Project properties)
Wow, interesting. What do you intend to use it for – writing you own web crawler? :-)