我試圖編寫一個腳本讓PHP通過CURLOPT_CUSTOMREQUEST, 'PUT'
對我執行PUT請求,但我一直收到422錯誤(這意味着數據格式錯誤,無法處理) 。PHP CURL PUT使用CURLOPT_POSTFIELDS保持接收422錯誤使用
首先,我試着直接發送終端和郵遞員的PUT請求,兩者都正常工作。請求的主體是一個簡單的JSON格式:
{"status":"online"}
現在,這裏是我試過的代碼:
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_HTTPHEADER => array('Authorization: "Panda is cute"' . "\r\n" . 'application/json; charset=utf-8' . "\r\n" . 'Content-Length: 19' . "\r\n"),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POST => false,
CURLOPT_POSTFIELDS => http_build_query(array ("status" => "online"))
));
$out = curl_exec($ch);
curl_close($ch);
echo $out;
我曾嘗試上面的代碼的一些修改。
- 我想
curl_setopt
的一切,而不是把他們都在curl_setopt_array
- 我試着設置
CURLOPT_POST
爲true。 - 我試圖
CURLOPT_POSTFIELDS => json_encode(array ("status" => "online"))
- 我試圖
CURLOPT_POSTFIELDS => array ("status" => "online")
- 我試圖
CURLOPT_POSTFIELDS => '{"status":"online"}'
- 我試圖
CURLOPT_POSTFIELDS => 'http_build_query({"status":"online"})'
- 我試圖
CURLOPT_POSTFIELDS => 'http_build_query("status":"online")'
- 我試圖
json_encode
與上述兩個。 - 我也嘗試了以上所有與
curl_setopt
。 - 我還試圖用
"
,而不是我最喜歡的'
,我到處都可以像我在那兒寫過'PUT'
現在,當我使用非定製PUT請求,並上傳它的工作文件,但這是發佈挑戰,因爲我的製作環境不允許我做fopen()
。
P.S.感謝下面的答案,我知道爲什麼沒有現在的工作:
CURLOPT_HTTPHEADER => array('Authorization: "Panda is cute"' . "\r\n" . 'application/json; charset=utf-8' . "\r\n" . 'Content-Length: 19' . "\r\n")
這條線將投入額外的"\r\n"
在標題的末尾(但是沒有它PHP不接受我的原語法,並會發布錯誤消息,而不是渲染頭部),使我的身體"\r\n"{"status":"online"}
的內容代替。從POSTMAN
生成
郵遞員功能生成的代碼,所以對於PHP可以生成代碼,看看你有什麼做錯了:) –
@AlwaysSunny是請告訴我如何產生代碼與PHP,我試圖使用數據包捕獲,但它沒有工作。 –
想看看'生成代碼'鏈接在右上角https://www.getpostman.com/docs/code_snippets –