以前の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エラーで失敗することです。
解決済み:問題は次のとおりです。
_CUSTOMREQUEST
と_POST
の両方を介してPOST
を設定し、_CUSTOMREQUEST
は_POST
に_HTTPGET
に切り替えられている間、POST
として維持されました。サーバーは、_CUSTOMREQUEST
のヘッダーが正しいヘッダーであると想定し、411を返しました。
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
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に等しい]
TRUE
をresetHTTPリクエストメソッドをGETに設定します。
GETはデフォルトであるため、これは要求メソッドが変更された場合にのみ必要です。
Curl_exec($ curl_handle)を呼び出す前にこれを追加してください
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
CURLリクエストはデフォルトでGETです。GETCURLリクエストを行うためにオプションを設定する必要はありません。