PHPのcURLが初めてです。 curlオプションの使用に関して質問があります。
ルートwwwにあるtest1.phpとtest2.phpの2つのスクリプトファイルを検討します。 buntu 12.04 LTSを使用しています。 PHP=のlibcurlバージョンは7.22.です。
test1.phpの内容
<?php
$ch = curl_init();
$post_data = array(
'firstname' => 'John',
'lastname' => 'Doe'
);
curl_setopt($ch, CURLOPT_URL, 'localhost/test2.php');
curl_setopt($ch, CURLOPT_POST, TRUE); //is it optional?
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_exec($ch);
curl_close($ch);
?>
test2.phpの内容
<?php
var_dump($_POST);
?>
ブラウザでtest1.phpを実行すると、投稿された結果を見ることができます。 CURLOPT_POSTを含むcurlオプションを削除しても、例は機能します。 CURLOPT_POSTをfalseに設定しても、投稿が実行され、結果が表示されます。それで、CURLOPT_POSTはまったく必要ないのでしょうか?オプションCURLOPT_POSTFIELDS
は、CURLOPT_POST
オプションを使用せずに[〜#〜] post [〜#〜]を介してデータを送信します。 test2.phpで$_SERVER
を印刷すると、要求メソッドは常にPOST
に設定されます(オプションCURLOPT_POST
の有無にかかわらず)。
CURLOPT_POST
オプションの正確な使用方法を教えてください。 POST
経由でデータを送信するために必要ですか?
あなたは正しいです。 CURLOPT_POSTFIELDSは、CURLOPT_POSTを意味します。 CURLOPT_POSTFIELDSを使用している間は、CURLOPT_POSTを使用する必要はありません。この場合、リクエストメソッドは常にPOSTに設定されます。
これは、[〜#〜] post [〜#〜]リクエスト。
なりたくない場合は、[〜#〜] post [〜#〜]request、ただしCURLOPT_POSTFIELDSを設定します。関連するQ&Aを参照してください。
将来の参照のために、APIドキュメントはCURLOPT_POSTについてこう述べています
概要:
trueパラメーターは、ライブラリに通常のHTTPポストを実行するよう指示します。これにより、ライブラリは「Content-Type:application/x-www-form-urlencoded」ヘッダーを使用します。 (これは、最も一般的に使用されるPOSTメソッド)です。
CURLOPT_POSTFIELDSオプションを使用して、送信するデータを指定し、CURLOPT_POSTFIELDSIZEを使用してデータサイズを設定します。オプションで、CURLOPT_READFUNCTIONおよびCURLOPT_READDATAオプションを使用してPOSTにデータを提供できます。
CURLOPT_HTTPHEADERで独自に設定することで、デフォルトのPOST Content-Type:ヘッダーを上書きできます。
POSTをHTTP 1.1で使用すると、「Expect:100-continue」ヘッダーの使用が暗示されます。通常どおりCURLOPT_HTTPHEADERでこのヘッダーを無効にできます。
POSTをHTTP 1.1サーバーに使用する場合、チャンクエンコードを使用する場合、POST=を開始する前にサイズを知らなくてもデータを送信できます。これを有効にするには、CURLOPT_HTTPHEADERで「Transfer-Encoding:chunked」などのヘッダーを追加します。HTTP1.0またはチャンク転送なしで、リクエストでサイズを指定する必要があります。
POSTリクエストを発行し、代わりにHEADまたはGETを行いたい場合、CURLOPT_NOBODYを使用して新しいリクエストタイプを明示的に選択するか、 CURLOPT_HTTPGETなど。
CURLOPT_POSTを試行するように設定すると、CURLOPT_HTTPHEADERの「Content-Type:application/json; charset = utf-8」の設定がオーバーライドされるかどうかを現在テスト中です。