没有自动代理连接头的libcurl HTTP HEAD请求

我需要澄清使用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(); 

上面显示的代码以稍微不同的forms发送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(export 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, "");