网上已有一些技术文章,描述了curl_easy_perform卡住,需要设置超时标志。这种情况有些是网络断开的原因造成的。
今天遇到了一个问题,curl_easy_perform一直处于等待,实际上服务器已经响应回来了,使用postman发送同样的请求,也可以正常接收响应,但是接口确一直等待,没有返回。
发送的为post请求,但是post没有内容,发送的内容都拼接在url上面了,这样的情况,会造成curl_easy_perform一直等待。
首先设置了post请求:
curl_easy_setopt(curl, CURLOPT_POST, 1);
造成这种情况的代码如下, 没有设置post请求数据:
if(NULL != post && '\0' != post[0])
{
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(post));
}
可以看到上面的代码,如果post为NULL,则不会设置post请求数据。如此发送出去的数据,即使服务端响应数据,也会一直等待。
但是把CURLOPT_POSTFIELDS设置为任意字符,都可以正常通信。