失败时是否可能获得错误代码(如errno)或错误描述(如curl_easy_strerror)curl_easy_init?
不可以。无法找到原因。从库版本7.58.0的源代码...
struct Curl_easy *curl_easy_init(void) {
CURLcode result;
struct Curl_easy *data;
// Etc..
result = Curl_open(&data);
if (result) {
DEBUGF(fprintf(stderr, "Error: Curl_open failed\n"));
return NULL;
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,如果Curl_open(...)失败,该库只会输出错误并中止:它不会修改任何状态变量,例如errno您以后可以检查以确定状态的原因。
但是,如果呼叫对您失败,则可能是因为curl_global_init()失败。curl_easy_init()如果您自己事先不调用它,则会自动调用它。curl_global_init()-不像
curl_easy_init()-确实会返回错误代码。
这个故事告诉我们......
呼叫curl_global_init(...)和呼叫前检查它的返回值curl_easy_init()。不要依靠curl_easy_init()自动进行。
这至少可以让你辨别是否curl_global_init(...)或Curl_open()失败。
例如
CURLcode res = curl_global_init(CURL_GLOBAL_ALL);
if (res != 0) {
fprintf("Failed global init ...\n");
exit(1);
}
CURL *curl = curl_easy_init();
if (!curl) {
///
}
// Etc.
curl_easy_cleanup(curl);
curl_global_cleanup();
Run Code Online (Sandbox Code Playgroud)