libcurl
详参libcurl
1 curl_easy_getinfo
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );
使用此函数从curl会话请求内部信息。第三个参数必须是指向long的指针、指向char*
的指针、指向struct curl_slist*
的指针或指向double的指针(本文档将进一步介绍)。指向的数据将相应地填充,并且仅当函数返回CURLE_OK
时才可以依赖。如果要获取传输相关数据,请在执行传输后使用此函数。
除非下面明确提到,否则不应释放此函数返回的内存。
CURLINFO_EFFECTIVE_URL
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp);
传入指向字符指针的指针,并获取上次使用的有效URL。
在要求libcurl遵循重定向的情况下,它很可能与使用CURLOPT_URL
设置的值不同。
urlp指针将为空或指向您不能释放的私有内存-当您对相应的curl句柄调用curl_easy_cleanup
时,它将被释放。
2. CURLINFO_RESPONSE_CODE
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep);
将指针传递给long以接收上次接收的HTTP、FTP或SMTP响应代码。这个选项以前在libcurl 7.10.7和更早版本中被称为CURLINFO_HTTP_代码。如果未收到服务器响应代码,则存储的值将为零。请注意,应该使用CURLINFO_HTTP_CONNECTCODE
读取代理的连接响应,而不是这个。
支持7.25.0中添加的SMTP响应。
示例:
CURL *curl = curl_easy_init();
if(curl) {
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
res = curl_easy_perform(curl);
if(res == CURLE_OK) {
long response_code;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
}
curl_easy_cleanup(curl);
}
CURLINFO_CONTENT_TYPE
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct);
传递指向char指针的指针以接收下载对象的内容类型。
这是从Content Type:字段读取的值。如果获得空值,则意味着服务器未发送有效的内容类型头,或者使用的协议不支持此操作。
ct指针将是空的,或者指向私有内存—您不能释放它—当您对相应的curl句柄调用curl_easy_cleanup
时,它将被释放。
curl_easy_perform
CURLcode curl_easy_perform(CURL *easy_handle);
在curl_easy_init
和所有curl_easy_setopt
调用之后调用此函数,并将执行选项中描述的传输。它必须使用与返回的curl_easy_init
调用相同的easy_
句柄作为输入来调用。
curl_easy_perform
以阻塞的方式执行整个请求,并在完成或失败时返回。有关非阻塞行为,请参见curl_multi_perform
。
您可以使用相同的easy_
句柄执行任意数量的curl_easy_
调用。如果您打算传送多个文件,我们甚至鼓励您这样做。然后,libcurl将尝试在以下传输中重新使用相同的连接,从而使操作更快、占用更少的CPU和使用更少的网络资源。请注意,您必须在调用之间使用curl_easy_setopt
来设置以下curl_easy_perform
的选项。
决不能使用同一个简单句柄从两个位置同时调用此函数。让函数在另一次调用之前先返回。如果要并行传输,必须使用多个curl easy_
句柄。
当easy_handle
被添加到多句柄时,curl_easy_perform
不能使用它。
curl_easy_setopt
CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
curl_easy_setop