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

2024-04-27

我需要关于使用 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 (export http_proxy=""),请求将按预期发出。

我相信有一种方法可以明确告诉 libcurl 使用/不使用代理,但我不记得了。

顺便说一句,这两行代码

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

没有意义,因为不会发送空标头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

libcurl HTTP HEAD 请求没有自动代理连接标头 的相关文章

随机推荐