卷曲错误代码 7

Posted

技术标签:

【中文标题】卷曲错误代码 7【英文标题】:Curl Error code 7 【发布时间】:2015-12-12 05:28:02 【问题描述】:

我在某些客户端计算机上遇到 curl 请求问题。尽管 http 请求在浏览器和大多数 win 7 64 位 sp1 机器上都有效,但在某些用户机器上却失败了。 感谢您的意见。这是使用 curl 的代码存根。

谢谢

bool HttpClient::request(const ArStr& url, HttpBuffer& header, HttpBuffer& body, unsigned long& status, ArStr& contentEncoding
    , bool bFollowRedirect /*= true*/, bool bForceNoCache /*= false*/, bool bForceNoCookie /*= true*/)

    try
    
        bool ret = false;

        CURL *curl_handle;

        /* init the curl session */
        curl_handle = curl_easy_init();
        if (curl_handle == NULL)
        
            Logger::Instance()->Error(_T("Failed to init curl"));
            return ret;
        

        curl_easy_setopt(curl_handle, CURLOPT_NOSIGNAL, 1);

        curl_easy_setopt(curl_handle, CURLOPT_URL, url.c_str());

        unsigned long nConnectTimeout = _nConnectTimeout;

        if (bFollowRedirect)
            curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1);

        if (bForceNoCookie)
            curl_easy_setopt(curl_handle, CURLOPT_COOKIESESSION, 1); // Set this value to ensure the session does not reuse old cookie, by default it is 0

        if (bForceNoCache)
            curl_easy_setopt(curl_handle, CURLOPT_FRESH_CONNECT, 1); // By default it is 0

        //add proxy setting with scheme

        char strProxy[1024] =  0 ;
       curl_easy_setopt(curl_handle, CURLOPT_PROXYPORT, strProxy);

        curl_easy_setopt(curl_handle, CURLOPT_CONNECTTIMEOUT_MS, &nConnectTimeout);

        unsigned long nTimeout = max(_nReceiveTimeout, _nSendTimeout);
        curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT_MS, &nTimeout);
        struct curl_slist *list = NULL;
        list = curl_slist_append(list, "Test: data");
        curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, list);
        /* no progress meter please */
        curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1);

        /* send all data to this function  */
        curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);

        curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, &header);

        curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &body);

        curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0L);
        curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0L);
        curl_easy_setopt(curl_handle, CURLOPT_DEBUGFUNCTION, debug_callback);
        curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1); // For outputing debug information
        curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
        /* get it! */
        CURLcode res = CURLE_OK;
        try
        
            res = curl_easy_perform(curl_handle);
        
        catch (exception ex)
        
            Logger::Instance()->Error(_T("Failed to post data to %s, exception: %s"), url.c_str(), ex.what());
            res = CURLE_HTTP_POST_ERROR;
        
        Logger::Instance()->Info(_T("status %d"), status);
        Logger::Instance()->Info(_T("curl result %d"), res);

        curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &status);

        char *ct;
        curl_easy_getinfo(curl_handle, CURLINFO_CONTENT_TYPE, &ct);
        if (ct != NULL)
            contentEncoding = Utils::StringToArStr(ct);

        _lastInetErrorCode = res;

        if (res != CURLE_OK)
        
            Logger::Instance()->Error(_T("Failed to send HTTP request, error code: %d"), res);
            ret = false;
        
        else
        
            ret = true;
        

        /* cleanup curl stuff */
        curl_easy_cleanup(curl_handle);

        return ret;
    
    catch (exception ex)
    
        Logger::Instance()->Error(_T("Failed to send http request"), ex.what());
    

【问题讨论】:

【参考方案1】:

List of return codes of cURL

CURLE_COULDNT_CONNECT (7)

无法连接()到主机或代理。

【讨论】:

我已经查过了这个错误代码。但是为什么会失败(浏览器上的http请求有效) @PriyaRajput 防火墙?网络超时?同一个专用网络?一些奇怪的窗口安全?

以上是关于卷曲错误代码 7的主要内容,如果未能解决你的问题,请参考以下文章

卷曲导致openssl错误

卷曲错误:没有路由到主机

卷曲错误:如何重新启用它?(Facebook Auth)

Internet Explorer 上的 CSS 错误阴影效果(纸张卷曲)

卷曲错误:错误:1408F10B:SSL 例程:SSL3_GET_RECORD:错误的版本号

Cocoapods安装错误 - 卷曲:(56)Recv失败:由对等方重置连接