没有自动Proxy-Connection标头的libcurl HTTP HEAD请求

时间:2010-06-02 07:20:17

标签: c libcurl

我需要澄清使用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 个答案:

答案 0 :(得分: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:");

没有意义,因为没有发送空标题。

答案 1 :(得分:1)

如果你不想使用http_proxy envirionment,请按下面的空值调用函数。

curl_easy_setopt(curl, CURLOPT_PROXY, "");