PHPCURLでPOSTからGETに切り替える方法


83

以前の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ヘッダーを配置することになり、接続が411ERRORで失敗することです。


3
Getリクエストには注意してください。グーグルはそれらを楽しんでいます。;)
NotMe 2009

10
@ Chris-友人は、GETリクエストを介してユーザーが投稿したコンテンツを管理するサイトを構築したときに困難な方法を発見しました。Googlebotは、すべての「削除」リンクを喜んで追跡し、予測可能な結果を​​もたらしました。
メレディスL.パターソン

回答:


109

GETリクエストを実行するときは、URLの最後にクエリ文字列を配置していることを確認してください。

$ qry_str = "?x = 10&y = 20";
$ ch = curl_init();

//ここに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);
$ contentを出力します。
POSTを使用すると、代わりにCURLOPT_POSTFIELDSオプションを介してデータを渡します。 
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);

//リクエストメソッドをPOSTに設定します
curl_setopt($ ch、CURLOPT_POST、1);

// CURLOPT_POSTFIELDSを使用してここにクエリデータを設定します
curl_setopt($ ch、CURLOPT_POSTFIELDS、$ qry_str);

$ content = trim(curl_exec($ ch));
curl_close($ ch);
$ contentを出力します。

ノートcurl_setopt()ドキュメントのためにCURLOPT_HTTPGET(強調追加)。

[CURLOPT_HTTPGETを]TRUE設定して、HTTPリクエストメソッドをGETにリセットします。
GETがデフォルトであるため、これはリクエストメソッドが変更された場合にのみ必要です。


3
これは、51秒のタイムアウトを設定するためのかなり邪悪な方法です。
ジャックグーセン2017年

ナイスキャッチ@JackGoossen!
RC。

55

curl_exec($ curl_handle)を呼び出す前にこれを追加してください

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');

39

解決済み:問題はここにあります:

とのPOST両方_CUSTOMREQUESTを介して設定し、に切り替えたときと同じよう_POST_CUSTOMREQUEST永続化POST_POSTました_HTTPGET。サーバーはからのヘッダー_CUSTOMREQUESTが正しいものであると想定し、411で戻ってきました。

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.