HTTP HEAD-запрос libcurl без автоматического заголовка Proxy-Connection - PullRequest
2 голосов
/ 02 июня 2010

Мне нужны пояснения по использованию libcurl для:

Мне нужно отправить запрос http HEAD, как показано ниже:

HEAD /mshare/3/30002:12:primary/stream_xNKNVH.mpeg HTTP/1.1
Host: 192.168.70.1:8080
Accept: */*
User-Agent: Kreatel_IP-STB
getcontentFeatures.dlna.org: 1

Код, который я написал (показан ниже), отправляет запрос HEAD немного по-другому:

 curl_global_init(CURL_GLOBAL_ALL);
 CURL* ctx = NULL;
 const char *url = "http://192.168.70.1:8080/mshare/3/30002:12:primary/stream_xNKNVH.mpeg" ;
 char *returnString;
 struct curl_slist *headers = NULL;
 ctx = curl_easy_init();
 headers = curl_slist_append(headers,"Accept: */*");
 headers = curl_slist_append(headers,"User-Agent: Kreatel_IP-STB");\
 headers = curl_slist_append(headers,"getcontentFeatures.dlna.org: 1");
 headers = curl_slist_append(headers,"Pragma:");
 headers = curl_slist_append(headers,"Proxy-Connection:");
 curl_easy_setopt(ctx,CURLOPT_HTTPHEADER , headers );
 curl_easy_setopt(ctx,CURLOPT_NOBODY ,1 );
 curl_easy_setopt(ctx,CURLOPT_VERBOSE, 1);
 curl_easy_setopt(ctx,CURLOPT_URL,url );
 curl_easy_setopt(ctx,CURLOPT_NOPROGRESS ,1 );
 curl_easy_perform(ctx);
 curl_easy_cleanup(ctx);
 curl_global_cleanup();

Приведенный выше код отправляет запрос HEAD в несколько иной форме, добавляя заголовок Proxy-Connection (показан ниже)

HEAD http://192.168.70.1:8080/mshare/3/30002:12:primary/stream_xNKNVH.mpeg HTTP/1.1
Host: 192.168.70.1:8080
Proxy-Connection: Keep-Alive
Accept: */*
User-Agent: Kreatel_IP-STB
getcontentFeatures.dlna.org: 1

Может кто-нибудь, поделитесь соответствующим кодом?

Ответы [ 2 ]

1 голос
/ 03 ноября 2010

, если вы не хотите использовать http_proxy envirionment, вызывайте функцию с пустым значением, как показано ниже.

curl_easy_setopt(curl, CURLOPT_PROXY, "");
1 голос
/ 02 июня 2010

Это вызвано тем, что libcurl, похоже, автоматически считывает переменную окружения http_proxy. Этот запрос является нормальным, когда вы находитесь за HTTP-прокси. Прокси-сервер должен знать полный URL-адрес, чтобы сделать запрос, и поэтому запрос выглядит иначе.

Попробуйте сбросить переменную среды http_proxy (export http_proxy = "") перед выполнением вашей программы, и запрос будет выполнен в соответствии с ожиданиями.

Я полагаю, что есть способ явно указать libcurl использовать / не использовать прокси, но я его не помню.

Кстати, это две строки кода

 headers = curl_slist_append(headers,"Pragma:");
 headers = curl_slist_append(headers,"Proxy-Connection:");

не имеют смысла, потому что пустые заголовки не отправляются.

...