【问题标题】:Cant get response error text in Curl request无法在 Curl 请求中获取响应错误文本
【发布时间】:2015-02-06 00:08:13
【问题描述】:

我能够得到这样的 HTTP 响应代码:

curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &ResponseCode);

但是我怎样才能得到响应错误文本呢?我认为 CURLOPT_ERRORBUFFER 可以帮助我:

char error_buf[CURL_ERROR_SIZE];
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error_buf);

但即使 ResponseCode=500 并且请求状态文本返回,它也似乎是空的(我对此很确定,因为 JQuery ajax 请求显示了它)。那么如何做到这一点呢?

【问题讨论】:

    标签: c ajax curl request


    【解决方案1】:

    解决了:

    curl_easy_setopt(curl, CURLOPT_FAILONERROR, true); //<= this is important, but not obvious
    char error_buf[CURL_ERROR_SIZE];
    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error_buf);
    

    事实证明,尽管 HTTP 响应代码 500 CURLcode 是 CURLE_OK - 这是默认行为,这就是 error_buf 中没有错误消息的原因。 CURLOPT_FAILONERROR 强制 Curl 将所有 >= 300 的响应代码转换为错误。

    【讨论】:

      【解决方案2】:

      curl_easy_perform 的返回值可以传递给curl_easy_strerror 以获取错误的文本表示。它可能不是您想要的“响应错误”,但有助于了解请求以 500 之类的代码结束的原因。

      【讨论】:

      • 如您所述, curl_easy_strerror 仅返回响应代码的文本描述。在 CURLOPT_ERRORBUFFER 中返回真正的错误消息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2019-02-09
      相关资源
      最近更新 更多