2009-08-04 14 views
63

私は以前のポストリクエストからGetリクエストへの切り替えを試みました。それは、そのGetを仮定しますが、最終的に投稿を行います。PHP CURLでPOSTから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

Getリクエストには注意してください。 Googleはそれらを楽しんでいる。 ;) – NotMe

+8

@Chris - 友人は、GETリクエストでユーザーが投稿したコンテンツを管理するサイトを構築したときの難しい方法を発見しました。 Googlebotはすべての「削除」リンクを喜んでフォローし、予測可能な結果を​​得ました。 –

答えて

28

:問題はここにある:

私は_CUSTOMREQUEST_POSTの両方を経由してPOSTを設定し、_POST_HTTPGETに切り替えながら_CUSTOMREQUESTPOSTとして存続しました。サーバーは、あなたは、デフォルトではCURLの要求がGETの

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

GETリクエストを実行するときに、URLの最後にクエリ文字列を配置していることを確認してください。 CURLOPT_HTTPGETためcurl_setopt() docsから

 
$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; 

注(強調追加):

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

+0

それは51秒のタイムアウトを設定するかなり悪い方法です! –

+0

ニースキャッチ@JackGoossen! –

39

に戻ってきましたGET CURLリクエストを作成するオプションを設定する必要はありません。

2

正しいものであることを_CUSTOMREQUESTからヘッダを仮定し、curl_exec($のcurl_handle)を呼び出す前にこれを追加411

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

ここではこのようにはなりません...カールは自動的に投稿しようとしています。 –

関連する問題