我需要澄清使用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
任何人都可以共享相应的代码吗?
答案 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, "");