1
我正在用C編寫一個http客戶端使用libcurl。但是,當重新使用相同的句柄傳輸PUT
後跟POST
時,我遇到了一個奇怪的問題。下方的示例代碼:libcurl - POST後PUT問題
#include <curl/curl.h>
void send_a_put(CURL *handle){
curl_easy_setopt(handle, CURLOPT_UPLOAD, 1L); //PUT
curl_easy_setopt(handle, CURLOPT_INFILESIZE, 0L);
curl_easy_perform(handle);
}
void send_a_post(CURL *handle){
curl_easy_setopt(handle, CURLOPT_POST, 1L); //POST
curl_easy_setopt(handle, CURLOPT_POSTFIELDSIZE, 0L);
curl_easy_perform(handle);
}
int main(void){
CURL *handle = curl_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, "http://localhost:8888/");
curl_easy_setopt(handle, CURLOPT_HTTPHEADER,
curl_slist_append(NULL, "Expect:"));
curl_easy_setopt(handle, CURLOPT_VERBOSE, 1L); //for debug
send_a_put(handle);
send_a_post(handle);
curl_easy_cleanup(handle);
return 0;
}
的問題是,而不是發送一個PUT
然後POST
,它發送2個PUT
S:
> PUT/HTTP/1.1
Host: localhost:8888
Accept: */*
Content-Length: 0
< HTTP/1.1 200 OK
< Date: Wed, 07 Dec 2011 04:47:05 GMT
< Server: Apache/2.0.63 (Unix) PHP/5.3.2 DAV/2
< Content-Length: 0
< Content-Type: text/html
> PUT/HTTP/1.1
Host: localhost:8888
Accept: */*
Content-Length: 0
< HTTP/1.1 200 OK
< Date: Wed, 07 Dec 2011 04:47:05 GMT
< Server: Apache/2.0.63 (Unix) PHP/5.3.2 DAV/2
< Content-Length: 0
< Content-Type: text/html
更改順序使得正確地發生兩個傳輸(即send_a_post()
然後send_a_put()
)。如果我在PUT
之後或POST
之後發送GET
,一切都會正常。該問題僅在PUT
後跟POST
時發生。
有誰知道它爲什麼會發生?
是的,我知道它。問題不在於'GET'或'HEAD'方法,而是在發送'PUT'後跟一個'POST'。 – tcurvelo
這與我所描述的行爲是一樣的......你只需要設置正確的選項。 –
對於libcurl,設置'CURLOPT_NOBODY'表示'HEAD','CURLOPT_HTTPGET'表示'GET'。好?在我展示的代碼中,我已經在'send_a_post()'函數中將新的請求類型設置爲'CURLOPT_POST'。 – tcurvelo