示例#1
0
struct http_request *http_dorequest_url( char *url_string, http_input_function func, gpointer data )
{
	url_t *url = g_new0( url_t, 1 );
	char *request;
	void *ret;
	
	if( !url_set( url, url_string ) )
	{
		g_free( url );
		return NULL;
	}
	
	if( url->proto != PROTO_HTTP && url->proto != PROTO_HTTPS )
	{
		g_free( url );
		return NULL;
	}
	
	request = g_strdup_printf( "GET %s HTTP/1.0\r\n"
	                           "Host: %s\r\n"
	                           "Connection: close\r\n"
	                           "User-Agent: BitlBee " BITLBEE_VERSION " " ARCH "/" CPU "\r\n"
	                           "\r\n", url->file, url->host );
	
	ret = http_dorequest( url->host, url->port,
	                      url->proto == PROTO_HTTPS, request, func, data );
	
	g_free( url );
	g_free( request );
	return ret;
}
示例#2
0
static void omegle_get(void *to_pass, char *host, char *path, http_input_function callback)
{
	GString *request;

	request = g_string_new("");

	g_string_append_printf(request, "GET %s HTTP/1.0\r\n", path);
	g_string_append_printf(request, "Host: %s\r\n", host);
	g_string_append_printf(request, "User-Agent: BitlBee %s\r\n", BITLBEE_VERSION);
	g_string_append_printf(request, "\r\n");

	http_dorequest(host, 80, 0, request->str, callback, to_pass);

	g_string_free(request, TRUE);
}
示例#3
0
static void omegle_post(void *to_pass, char *session_id, char *host, char *path, char *data, http_input_function callback)
{
	GString *request;
	GString *form;

	request = g_string_new("");
	form    = g_string_new("");

	g_string_append_printf(form, "id=%s&%s", session_id, data);

	g_string_append_printf(request, "POST %s HTTP/1.0\r\n", path);
	g_string_append_printf(request, "Host: %s\r\n", host);
	g_string_append_printf(request, "User-Agent: BitlBee %s\r\n", BITLBEE_VERSION);
	g_string_append_printf(request, "Content-Type: application/x-www-form-urlencoded\r\n");
	g_string_append_printf(request, "Content-Length: %zd\r\n\r\n", form->len);
	g_string_append_printf(request, "%s", form->str);

	http_dorequest(host, 80, 0, request->str, callback, to_pass);

	g_string_free(request, TRUE);
	g_string_free(form, TRUE);
}
示例#4
0
/**
 * Sends a #SteamHttpReq.
 *
 * @param req The #SteamHttpReq.
 **/
void steam_http_req_send(SteamHttpReq *req)
{
    gchar *str;
    gchar *hs;
    gchar *ps;

    g_return_if_fail(req != NULL);

    steam_http_req_asm(req, &hs, &ps, &str);

#ifdef DEBUG_STEAM
    steam_http_req_debug(req, FALSE, hs, ps);
#endif /* DEBUG_STEAM */

    req->request = http_dorequest(req->host, req->port,
                                  (req->flags & STEAM_HTTP_REQ_FLAG_SSL),
                                  str, steam_http_req_cb, req);
    g_hash_table_add(req->http->reqs, req);

    g_free(hs);
    g_free(ps);
    g_free(str);

    if (G_UNLIKELY(req->request == NULL)) {
        g_set_error(&req->err, STEAM_HTTP_ERROR, STEAM_HTTP_ERROR_INIT,
                    "Failed to init request");
        steam_http_req_done(req);
        return;
    }

    /* Prevent automatic redirection */
    req->request->redir_ttl = 0;

    if (req->timeout > 0) {
        req->toid = b_timeout_add(req->timeout, steam_http_req_send_timeout,
                                  req);
    }
}
示例#5
0
/**
 * Do a request.
 * This is actually pretty generic function... Perhaps it should move to the lib/http_client.c
 */
struct http_request *twitter_http(struct im_connection *ic, char *url_string, http_input_function func,
                                  gpointer data, int is_post, char **arguments, int arguments_len)
{
	struct twitter_data *td = ic->proto_data;
	char *tmp;
	GString *request = g_string_new("");
	void *ret;
	char *url_arguments;
	url_t *base_url = NULL;

	url_arguments = g_strdup("");

	// Construct the url arguments.
	if (arguments_len != 0) {
		int i;
		for (i = 0; i < arguments_len; i += 2) {
			tmp = twitter_url_append(url_arguments, arguments[i], arguments[i + 1]);
			g_free(url_arguments);
			url_arguments = tmp;
		}
	}

	if (strstr(url_string, "://")) {
		base_url = g_new0(url_t, 1);
		if (!url_set(base_url, url_string)) {
			g_free(base_url);
			return NULL;
		}
	}

	// Make the request.
	g_string_printf(request, "%s %s%s%s%s HTTP/1.1\r\n"
	                "Host: %s\r\n"
	                "User-Agent: BitlBee " BITLBEE_VERSION " " ARCH "/" CPU "\r\n",
	                is_post ? "POST" : "GET",
	                base_url ? base_url->file : td->url_path,
	                base_url ? "" : url_string,
	                is_post ? "" : "?", is_post ? "" : url_arguments,
	                base_url ? base_url->host : td->url_host);

	// If a pass and user are given we append them to the request.
	if (td->oauth_info) {
		char *full_header;
		char *full_url;

		if (base_url) {
			full_url = g_strdup(url_string);
		} else {
			full_url = g_strconcat(set_getstr(&ic->acc->set, "base_url"), url_string, NULL);
		}
		full_header = oauth_http_header(td->oauth_info, is_post ? "POST" : "GET",
		                                full_url, url_arguments);

		g_string_append_printf(request, "Authorization: %s\r\n", full_header);
		g_free(full_header);
		g_free(full_url);
	} else {
		char userpass[strlen(ic->acc->user) + 2 + strlen(ic->acc->pass)];
		char *userpass_base64;

		g_snprintf(userpass, sizeof(userpass), "%s:%s", ic->acc->user, ic->acc->pass);
		userpass_base64 = base64_encode((unsigned char *) userpass, strlen(userpass));
		g_string_append_printf(request, "Authorization: Basic %s\r\n", userpass_base64);
		g_free(userpass_base64);
	}

	// Do POST stuff..
	if (is_post) {
		// Append the Content-Type and url-encoded arguments.
		g_string_append_printf(request,
		                       "Content-Type: application/x-www-form-urlencoded\r\n"
		                       "Content-Length: %zd\r\n\r\n%s",
		                       strlen(url_arguments), url_arguments);
	} else {
		// Append an extra \r\n to end the request...
		g_string_append(request, "\r\n");
	}

	if (base_url) {
		ret = http_dorequest(base_url->host, base_url->port, base_url->proto == PROTO_HTTPS, request->str, func,
		                     data);
	} else {
		ret = http_dorequest(td->url_host, td->url_port, td->url_ssl, request->str, func, data);
	}

	g_free(url_arguments);
	g_string_free(request, TRUE);
	g_free(base_url);
	return ret;
}