PHP CURLでPOSTからGETに切り替える方法
質問
以前のPostリクエストからGetリクエストに切り替えようとしました。 Getを想定していますが、最終的には投稿を行います。
PHPで次のことを試しました:
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, null);
curl_setopt($curl_handle, CURLOPT_POST, FALSE);
curl_setopt($curl_handle, CURLOPT_HTTPGET, TRUE);
不足しているものは何ですか?
追加情報: POSTリクエストを実行するように設定された接続が既にあります。それは正常に完了しますが、後で接続を再利用して、上記のsetoptsを使用してGETに戻ると、不完全なPOSTヘッダーで内部的にPOSTを実行します。問題は、GETを実行していると考えているが、content-lengthパラメーターなしでPOSTヘッダーを置くことになり、接続が411エラーで失敗することです。
解決 3
解決済み:問題はここにあります:
_CUSTOMREQUEST
と _POST
の両方を介して POST
を設定し、 _CUSTOMREQUEST
は POST
_POST
が _HTTPGET
に切り替えられたときにcode>サーバーは、 _CUSTOMREQUEST
のヘッダーが正しいヘッダーであると想定し、411を返しました。
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
他のヒント
GETリクエストを行うときは、URLの最後にクエリ文字列を入れていることを確認してください。
$qry_str = "?x=10&y=20"; $ch = curl_init(); // Set query data here with the URL curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php' . $qry_str); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); $content = trim(curl_exec($ch)); curl_close($ch); print $content;
With a POST you pass the data via the CURLOPT_POSTFIELDS option instead of passing it in the CURLOPT__URL. ------------------------------------------------------------------------- $qry_str = "x=10&y=20"; curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); // Set request method to POST curl_setopt($ch, CURLOPT_POST, 1); // Set query data here with CURLOPT_POSTFIELDS curl_setopt($ch, CURLOPT_POSTFIELDS, $qry_str); $content = trim(curl_exec($ch)); curl_close($ch); print $content;
CURLOPT_HTTPGET
curl_setopt()
ドキュメントからのメモ>(強調を追加):
[CURLOPT_HTTPGETに等しく設定]
TRUE
に reset HTTPリクエストメソッドをGETに。
GETがデフォルトであるため、これは要求メソッドが変更された場合にのみ必要です。
curl_exec($ curl_handle)を呼び出す前にこれを追加します
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
CURLリクエストはデフォルトでGETです。GETCURLリクエストを行うためにオプションを設定する必要はありません。