ホームページ  >  記事  >  バックエンド開発  >  PHPカールのcurlopt_postfieldsパラメータの使用法の詳細

PHPカールのcurlopt_postfieldsパラメータの使用法の詳細

WBOY
WBOYオリジナル
2016-07-25 08:53:492471ブラウズ
コードをコピー

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

  1. [content_type] => multipart/form-data; border=————————-f924413ea122
コードをコピー

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

  1. [content_type] => application/x-www-form-urlencoded
コードをコピー

上記の例からわかるように、curl を使用し、パラメーターが data の場合、データを送信するときにサーバーへの http ヘッダーは content_type: application/x-www-form-urlencoded を送信します。これは、通常の Web ページでフォームを送信するときにブラウザーによって送信されるヘッダーです。また、multipart/form-data は、これがファイルのアップロードに使用されるフォームであることを認識しています。境界区切り文字を含めると、多くのバイトが追加されます。

PHPマニュアルには次のように書かれています。 http 「post」操作で投稿する完全なデータ。ファイルを投稿するには、ファイル名の前に @ を付けて、「para1=val1?2=val2&…」のような URL エンコードされた文字列として渡すことができます。フィールド名をキー、フィールド データを値とする配列として、値が配列の場合、コンテンツ タイプ ヘッダーは multipart/form-data に設定されます。

投稿データを提供するために配列を使用する場合、ファイルをアップロードするための @filename 書き込みメソッドと互換性を持たせるために、curl コンポーネントはおそらくデフォルトで content_type を multipart/form-data に設定します。 ほとんどのサーバーには影響しませんが、互換性のないサーバーがまだいくつかあります。

結論: ファイルをアップロードする必要がない場合は、post によって送信されたデータに対して http_build_query 処理を実行してから送信してみてください。これにより、互換性が向上し、リクエスト データ パケットが小さくなります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。