get方式登录
bool getLogin(string getFields, string url) {
CURL *curl_handle = NULL;
CURLcode res = CURLE_FAILED_INIT;
string szbuffer;
string szheader_buffer;
struct curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Accept-Encoding: gzip, deflate");
chunk = curl_slist_append(chunk, "Accept-Language: en-US,en;q=0.8");
chunk = curl_slist_append(chunk, "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36");
curl_global_init(CURL_GLOBAL_ALL);
curl_handle = curl_easy_init();
curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, chunk);
curl_easy_setopt(curl_handle, CURLOPT_URL, (url + getFields).c_str());
curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 5); //设置重定向的最大次数
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1); //设置301、302跳转跟随location
curl_easy_setopt(curl_handle, CURLOPT_COOKIEFILE, "cookie.dat");
curl_easy_setopt(curl_handle, CURLOPT_COOKIEJAR, "cookie.dat");
curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, FALSE);
//抓取内容后,回调函数
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, call_wirte_func);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &szbuffer);
//抓取头信息,回调函数
curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, header_callback);
curl_easy_setopt(curl_handle, CURLOPT_HEADERDATA, &szheader_buffer);
res = curl_easy_perform(curl_handle);
curl_easy_cleanup(curl_handle);
curl_slist_free_all(chunk);
chunk = NULL;
curl_global_cleanup();
if (res == CURLE_OK)
{
<span style="white-space:pre"> </span>return true;
}
return false;
}
post方式登录
postLogin(string postFields, string url) {
CURL *curl_handle = NULL;
CURLcode res = CURLE_FAILED_INIT;
string szbuffer;
string szheader_buffer;
struct curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Accept-Encoding: gzip, deflate");
chunk = curl_slist_append(chunk, "Accept-Language: en-US,en;q=0.8");
chunk = curl_slist_append(chunk, "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36");
curl_global_init(CURL_GLOBAL_ALL);
curl_handle = curl_easy_init();
curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, chunk);
curl_easy_setopt(curl_handle, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 5); //设置重定向的最大次数
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1); //设置301、302跳转跟随location
curl_easy_setopt(curl_handle, CURLOPT_COOKIEFILE, "cookie.dat");
curl_easy_setopt(curl_handle, CURLOPT_COOKIEJAR, "cookie.dat");
curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, FALSE);
//抓取内容后,回调函数
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, call_wirte_func);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &szbuffer);
//抓取头信息,回调函数
curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, header_callback);
curl_easy_setopt(curl_handle, CURLOPT_HEADERDATA, &szheader_buffer);
curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, postFields.c_str());
res = curl_easy_perform(curl_handle);
curl_easy_cleanup(curl_handle);
curl_slist_free_all(chunk);
chunk = NULL;
curl_global_cleanup();
if (res == CURLE_OK)
{
return true;
}
return false;
}
回调函数
size_t call_wirte_func(const char *ptr, size_t size, size_t nmemb, std::string *stream)
{
size_t len = size * nmemb;
stream->append(ptr, len);
return len;
}
size_t header_callback(const char *ptr, size_t size, size_t nmemb, std::string *stream)
{
size_t len = size * nmemb;
stream->append(ptr, len);
return len;
}