我的代碼如下所示:發送字符串PUT請求與libcurl的
curl = curl_easy_init();
if (curl) {
headers = curl_slist_append(headers, client_id_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_URL, "127.0.0.1/test.php");
curl_easy_setopt(curl, CURLOPT_PUT, 1L);
res = curl_easy_perform(curl);
res = curl_easy_send(curl, json_struct, strlen(json_struct), &io_len);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
哪個不工作,程序只是掛起,直到永遠。
在test.php的這些請求頭,我得到:
array(6) {
["Host"]=>
string(9) "127.0.0.1"
["Accept"]=>
string(3) "*/*"
["Transfer-Encoding"]=>
string(7) "chunked"
["X-ClientId"]=>
string(36) "php_..."
["Content-Type"]=>
string(16) "application/json"
["Expect"]=>
string(12) "100-continue"
}
但身體是空的,意味着,沒有JSON數據與請求一起發送。
我想用的libcurl做的其實是什麼都沒有,那麼這些命令行腳本:
curl -X PUT -H "Content-Type: application/json" -d '... some json ...' 127.0.0.1/test.php
完美!如果你想防止/抑制來自服務器的回覆,你需要設置'CURLOPT_WRITEFUNCTION'來接收數據或者將'CURLOPT_WRITEDATA'設置爲不同的'FILE *'句柄。 – karlphillip
爲什麼不使用'CURLOPT_UPLOAD'而不是'CURLOPT_CUSTOMREQUEST',就像[documentation](http://curl.haxx.se/libcurl/c/CURLOPT_PUT.html)所說的那樣? –
我必須做'curl_easy_setopt(curl,CURLOPT_CUSTOMREQUEST,NULL);' 'curl_easy_perform(curl)'之後''以防止下一個請求成爲PUT請求。 –