web-dev-qa-db-ja.com

POSTからPHP CURLで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を実行すると信じているが、コンテンツ長パラメーターなしでPOSTヘッダーを配置することになり、接続が411エラーで失敗することです。

79
gnosio

解決済み:問題は次のとおりです。

_CUSTOMREQUEST_POSTの両方を介してPOSTを設定し、_CUSTOMREQUEST_POST_HTTPGETに切り替えられている間、POSTとして維持されました。サーバーは、_CUSTOMREQUESTのヘッダーが正しいヘッダーであると想定し、411を返しました。

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

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); 
 print $ content; 
 POSTを使用すると、CURLOPT__URLでデータを渡すのではなく
 CURLOPT_POSTFIELDSオプションを介してデータを渡します。
 ---------- -------------------------------------------------- ------------- 
 
 $ 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); 
 print $ content; 
 

curl_setopt() docs for CURLOPT_HTTPGET(強調を追加)からの注意:

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

104
RC.

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

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
51
Bao Le

CURLリクエストはデフォルトでGETです。GETCURLリクエストを行うためにオプションを設定する必要はありません。

2