使用libcurl访问https的问题

smilenot 2017-10-24 10:41:58

struct MemoryStruct {
char *memory;
size_t size;
};


static size_t
WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
size_t realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *)userp;

mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1);
if(mem->memory == NULL) {
/* out of memory! */
printf("not enough memory (realloc returned NULL)\n");
return 0;
}

memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;

return realsize;
//return size*nmemb;
}


void test1()
{
CURLcode res;
// curl_global_init(CURL_GLOBAL_ALL);
CURL* curl = curl_easy_init();

if( curl)
{

curl_easy_setopt(curl, CURLOPT_URL, "https://market.fx678red.com/fx678/1708/kline.php?ms=532680149fe49acc1eafc9583bf47751&excode=SHFE&code=RBXX01&type=day&t=0&time=1508396618&key=a3b896e4e60373fd40aa4537bc35e034");
//curl_easy_setopt(curl, CURLOPT_URL, "https://market.fx678red.com/fx678/1708/kline.php?ms=532680149fe49acc1eafc9583bf47751&excode=SHFE&code=BUXX08&type=day&t=0&time=1508735696&key=9dc4bae175c90c0650eb58d0f8646c87");


struct MemoryStruct chunk;
chunk.memory = (char*)malloc(1);
chunk.size = 0;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,(void *)&chunk);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0");

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);

curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);

res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}

}



int _tmain(int argc, _TCHAR* argv[])
{
test1();
return 0;
}



上面相似的url中,第二个url访问正常,但是第一个url访问总是返回超时错误CURLE_OPERATION_TIMEDOUT
命令行显示的错误信息如下


ontinuing anyway.
* STATE: PROTOCONNECT => DO handle 0x9336d0; line 1626 (connection #0)
> GET /fx678/1708/kline.php?ms=532680149fe49acc1eafc9583bf47751&excode=SHFE&code
=RBXX01&type=day&t=0&time=1508396618&key=a3b896e4e60373fd40aa4537bc35e034 HTTP/1
.1
Host: market.fx678red.com
User-Agent: libcurl-agent/1.0
Accept: */*

* STATE: DO => DO_DONE handle 0x9336d0; line 1688 (connection #0)
* STATE: DO_DONE => WAITPERFORM handle 0x9336d0; line 1813 (connection #0)
* STATE: WAITPERFORM => PERFORM handle 0x9336d0; line 1823 (connection #0)
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 200 OK
* Server nginx is not blacklisted
< Server: nginx
< Date: Tue, 24 Oct 2017 02:39:30 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
<

* Operation timed out after 3011 milliseconds with 69544110456832 bytes received

* Marked for [closure]: Disconnected with pending data
* multi_done
* Closing connection 0
* The cache now contains 0 members

我在想是不是上面红色标注的部分出了什么错误
有没有知道的朋友帮忙看看,谢谢各位。







...全文
1451 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
smilenot 2017-10-29
  • 打赏
  • 举报
回复
还有没有人能帮我看看啊
csulizhang 2017-10-24
  • 打赏
  • 举报
回复
这就不太清楚了,时间加长能访问就不错了
smilenot 2017-10-24
  • 打赏
  • 举报
回复
引用 2 楼 zhangli00 的回复:
红色的提示是说,3011毫秒之后超时,接收了69544110456832 bytes 的内容 也就是说,你的连接请求是正常的,但是请求的返回内容太多太多,3秒之后都还没有收完,所以超时报错,curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3); 这一句就是设置超时3秒的 你可以看看,第一你的请求过去之后,页面根据请求返回的信息是否正确,是否是把这么多字节的内容返回,第二,把这个超时时间3设置大一点
服务器是合作伙伴的服务器,我联系对方,对方说url在浏览器中打开正常,能正常显示数据,就不存在有什么问题,那是不是浏览器内部做了什么特殊处理,不然按理说的话浏览器也不至于能处理这么大数据 我尝试了把超时时间设置很长以后,函数返回正常,而且数据也是正确的,没有69544110456832 bytes这么大的内容 还有没有前辈能帮我看看这么什么怪问题
csulizhang 2017-10-24
  • 打赏
  • 举报
回复
红色的提示是说,3011毫秒之后超时,接收了69544110456832 bytes 的内容 也就是说,你的连接请求是正常的,但是请求的返回内容太多太多,3秒之后都还没有收完,所以超时报错,curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3); 这一句就是设置超时3秒的 你可以看看,第一你的请求过去之后,页面根据请求返回的信息是否正确,是否是把这么多字节的内容返回,第二,把这个超时时间3设置大一点
smilenot 2017-10-24
  • 打赏
  • 举报
回复
两个url在浏览器中访问都是正常的
oyljerry 2017-10-24
  • 打赏
  • 举报
回复
你的libcurl是否超时了,或者网络比较慢,有没有代理。
jacksonfan 2017-10-24
  • 打赏
  • 举报
回复
操作超时了 如果超时程序崩溃了可以加一句curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧