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? :-)