Libcurl lesson 3 HTTP gets weather information
Scene description
Get weather information from the t.weather.sojson.com web page. If you do not use the libcurl library, you need to implement Transfer-Encoding: chunked block receiving and Content-Encoding: gzip decompression. Now provide the libcurl implementation code.
Code
Size_t WriteResponseBody (void * ptr, size_t size, size_t nmemb, void * userData)
{
Std::string* pStrBuffer = (std::string*) userData
Size_t nLen = size * nmemb
PStrBuffer- > append ((char*) ptr, nLen)
Return nLen
}
Int GetWeatherUsingCurl (const std::string& strUrl, std::string& strResponseData)
{
CURL * pCurlHandle = curl_easy_init ()
Curl_easy_setopt (pCurlHandle, CURLOPT_CUSTOMREQUEST, "GET")
Curl_easy_setopt (pCurlHandle, CURLOPT_URL, strUrl.c_str ())
Curl_easy_setopt (pCurlHandle, CURLOPT_WRITEFUNCTION, WriteResponseBody); / / set callback function
/ / curl_easy_setopt (pCurlHandle, CURLOPT_HEADER, 1); / / Save HTTP header information to strResponseData
Curl_easy_setopt (pCurlHandle, CURLOPT_WRITEDATA, & strResponseData); / / set the parameters of the callback function to get feedback information
Curl_easy_setopt (pCurlHandle, CURLOPT_TIMEOUT, 15); / / timeout setting when receiving data. If the data is not received within 10 seconds, exit directly.
Curl_easy_setopt (pCurlHandle, CURLOPT_MAXREDIRS, 1); / / search times to prevent search too deep
Curl_easy_setopt (pCurlHandle, CURLOPT_CONNECTTIMEOUT, 5); / / connection timeout. If this value is set too short, it may disconnect if the data is not requested.
CURLcode nRet = curl_easy_perform (pCurlHandle)
Curl_easy_cleanup (pCurlHandle)
Return nRet
}
Call example
Std::string strResponseData
GetWeatherUsingCurl ("t.weather.sojson.com/api/weather/city/101200101", strResponseData)