ホームページ > php教程 > PHP开发 > PHP での CURL の CURLOPT_POSTFIELDS パラメータの使用法の詳細

PHP での CURL の CURLOPT_POSTFIELDS パラメータの使用法の詳細

高洛峰
リリース: 2016-12-23 15:18:35
オリジナル
1299 人が閲覧しました

通常の状況では、CURL を使用して POST データを送信する場合、次のように記述することに慣れています:

curl_setopt( $ch, CURLOPT_POSTFIELDS,$post_data);
ログイン後にコピー

しかし、この書き方はあまり役に立たない場合があり、サーバーから 500 エラーが返される可能性があります。しかし、Socket を使用してサーバーにデータを送信しようとすると、非常に正しい結果が得られます。
たとえば、サーバー上に次の PHP ファイルがあります:

<?php print_r($_SERVER);?>
ログイン後にコピー

詳細に注意を払わずに CURL を使用してサーバーにデータを送信すると、次のような結果が得られる可能性がありますが、これは理想的な結果ではありません:

[CONTENT_TYPE] => multipart/form-data; boundary=—————————-f924413ea122
ログイン後にコピー

しかし、$post_data の代わりに http_build_query($post_data) を使用して、この PHP スクリプトにデータを送信すると、上記とは異なる結果が得られます。これが私たちの理想的な結果です。

[CONTENT_TYPE] => application/x-www-form-urlencoded
ログイン後にコピー

上から見るのは難しくありません。この例では、CURL を使用し、パラメーターがデータである場合、データをサーバーに送信するときに、HTTP ヘッダーによって Content_type: application/x-www-form-urlencoded が送信されます。これは、通常の Web ページ

でフォームを送信するときにブラウザによって送信されるヘッダーです。そして multipart/form-data これはファイルのアップロードに使用されるフォームであることがわかります。境界区切り文字を含めると、多くのバイトが追加されます。
公式マニュアルには次のように書かれています:

The full data to post in a HTTP “POST” operation. To post a file, prepend a filename with @ and use the full path. This can either be passed as a urlencoded string like ‘para1=val1¶2=val2&…&#39; or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data.
ログイン後にコピー

投稿データを提供するために配列を使用する場合、CURL コンポーネントはおそらくファイルをアップロードする @filename 方法と互換性があるはずです。デフォルトでは、content_type は multipart/form-data に設定されます。ほとんどのサーバーには影響しませんが、互換性のない少数のサーバーがまだ存在します。
いくつかの要約を経て、最終的に結論に達しました。ファイルをアップロードする必要がない場合は、post によって送信されたデータに対して http_build_query 処理を実行してから送信することを試みます。これにより、互換性が向上し、リクエスト データ パケットが小さくなります。


PHP での CURL の CURLOPT_POSTFIELDS パラメーターの使用の詳細については、PHP の中国語 Web サイトに注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート