[英]curl_easy_perform returns -1 when server is not reachable
當我嘗試對無法訪問的服務器執行一些HTTP_POST,HTTP_DELETE操作時,返回代碼有時為-1。因為我的應用程序崩潰了。
這是我的示例代碼。
我的應用程序代碼在C ++中,我也在其中讀取響應和響應頭。
lCode = curl_easy_setopt(curlHandle, CURLOPT_HEADERFUNCTION,
HttpClientImplCurl::recvFunctionHeader);
if (lCode != CURLE_OK) {
LOG(LOG_CRIT, "CURL failure: curl_easy_setopt CURLOPT_HEADERFUNCTION returned %d\n", lCode);
curl_slist_free_all(lHeaders);
errorBuff = curl_easy_strerror(lCode);
return http_code;
}
lCode = curl_easy_setopt(curlHandle, CURLOPT_WRITEHEADER,
&readResHeaderBuffer);
if (lCode != CURLE_OK) {
LOG(LOG_CRIT, "CURL failure: curl_easy_setopt CURLOPT_WRITEHEADER returned %d\n", lCode);
curl_slist_free_all(lHeaders);
errorBuff = curl_easy_strerror(lCode);
return http_code;
}
lCode = curl_easy_setopt(curlHandle, CURLOPT_WRITEFUNCTION,
HttpClientImplCurl::recvFunction);
if (lCode != CURLE_OK) {
LOG(LOG_CRIT, "CURL failure: curl_easy_setopt WRITEFUNCTION returned %d\n", lCode);
curl_slist_free_all(lHeaders);
errorBuff = curl_easy_strerror(lCode);
return http_code;
}
lCode = curl_easy_setopt(curlHandle, CURLOPT_WRITEDATA,
&readResBuffer);
if (lCode != CURLE_OK) {
LOG(LOG_CRIT, "CURL failure: curl_easy_setopt WRITEDATA returned %d\n", lCode);
curl_slist_free_all(lHeaders);
errorBuff = curl_easy_strerror(lCode);
return http_code;
}
lCode = curl_easy_setopt(curlHandle, CURLOPT_CUSTOMREQUEST, "DELETE"); /* !!! */
if (lCode != CURLE_OK) {
LOG(LOG_CRIT, "CURL failure: curl_easy_setopt CURLOPT_CUSTOMREQUEST returned %d\n", lCode);
curl_slist_free_all(lHeaders);
errorBuff = curl_easy_strerror(lCode);
return http_code;
}
lCode = curl_easy_setopt(curlHandle, CURLOPT_POSTFIELDS, aInRemovedata.getBuffer()); /* data goes here */
if (lCode != CURLE_OK) {
LOG(LOG_CRIT, "CURL failure: curl_easy_setopt CURLOPT_POSTFIELDS returned %d\n", lCode);
curl_slist_free_all(lHeaders);
errorBuff = curl_easy_strerror(lCode);
return http_code;
}
lCode = curl_easy_perform(curlHandle);
if (lCode != CURLE_OK) {
LOG(LOG_CRIT, "CURL failure: curl_easy_perform returned %d\n", lCode);
curl_slist_free_all(lHeaders);
errorBuff = curl_easy_strerror(lCode);---->my doubt is when i am geting "-1", this line is caused the crash.
return http_code;
}
我的回調如下
size_t
HttpClientImplCurl::recvFunctionHeader(void *aInBuf, size_t aInSize,
size_t aInNmemb, void* aInUserp)
{
fprintf(stderr, "curl error: too small buffer in recv2\n");
((std::string*)aInUserp)->append((char*)aInBuf, aInSize * aInNmemb);
return aInSize * aInNmemb;
}
// Private static callback
size_t
HttpClientImplCurl::recvFunction(void *aInBuf, size_t aInSize,
size_t aInNmemb, void* aInUserp)
{
fprintf(stderr, "curl error: too small buffer in recv1\n");
((std::string*)aInUserp)->append((char*)aInBuf, aInSize * aInNmemb);
return aInSize * aInNmemb;
}
請幫助我,為什么我們偶爾會用“ -1”代替“ 28”。
這是函數簽名,其中errorBuf作為參數出現
int
HttpClientImplCurl::put(const HttpClient& aInClient,const base::Buffer& aInPutdata,
base::Buffer& aOutRecvBuf,base::Buffer& aOutRecvHeaderBuf,const char*& errorBuff)
您可以嘗試設置CURLOPT_ERRORBUFFER和CURLOPT_VERBOSE以獲取有關為什么curl_easy_perform返回的值為-1的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.