Intereting Posts

Запрос HTTP-заголовка libcurl без автоматического заголовка Proxy-Connection

Мне нужно разъяснить использование 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 

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

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

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

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

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

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

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

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

 curl_easy_setopt(curl, CURLOPT_PROXY, "");