没有自动代理连接头的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, "");