PHP の CURLOPT_POSTFIELDS パラメーターでの配列と文字列の使用の違い_PHP チュートリアル

WBOY
リリース: 2016-07-13 17:07:38
オリジナル
1143 人が閲覧しました

この記事では、PHP の CURLOPT_POSTFIELDS パラメーターでの配列と文字列の使用の違いについて説明します。詳しく知りたい方は、ぜひ参照してください。

PHP の CURL コンポーネントは、非常に一般的に使用される HTTP リクエスト シミュレーターです。

普段、投稿データを送信するときは、次のように書くのが習慣になっています:
curl_setopt( $ch, CURLOPT_POSTFIELDS,$post_data);
しかし、特定のサーバーにリクエストを送信すると、サーバーは 500 を返します。ソケット メソッドを使用して接続し、リクエストを送信し、通常のデータを返します。

のみを使用して Web ページに送信してみます。配列を使用して POST データを送信すると、受信した CONTENT_TYPE が次のようになっていることがわかります。

コードは次のとおりですコードをコピー

CURLOPT_POSTFIELDS が配列に設定されている場合、HTTP ヘッダーは Content_type: application/x-www-form-urlencoded を送信することがわかります。これは、通常の Web ページ
でフォームを送信するときにブラウザによって送信されるヘッダーです。そして multipart/form-data は、ファイルのアップロードに使用されるフォームであることがわかります。境界区切り文字を含めると、多くのバイトが追加されます。

マニュアルには次のように記載されています:

HTTP「POST」操作で投稿する完全なデータ。ファイル名の前に @ を付けてフルパスを使用します。これは、「para1=val1¶2=val2&…」のように URL エンコードされた文字列として渡すこともできます。フィールド名をキー、フィールド データを値とする配列。 value が配列の場合、Content-Type ヘッダーは multipart/form-data に設定されます。

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

この記事から得られた結論は、ファイルをアップロードする必要がない場合は、投稿によって送信されたデータに対して http_build_query を実行してから送信することを試みると、互換性が向上し、リクエスト データ パケットが小さくなる可能性があるということです。


次のオプションの値は、long 整数 (オプション パラメーターで指定) として使用されます:


• CURLOPT_INFILESIZE: ファイルをリモート サイトにアップロードするとき、このオプションはアップロードするファイルのサイズを PHP に伝えます。
• CURLOPT_VERBOSE : CURL にすべての予期しないイベントを報告させる場合は、このオプションをゼロ以外の値に設定します。
• CURLOPT_HEADER : 出力にヘッダーを含める場合は、このオプションをゼロ以外の値に設定します。
• CURLOPT_NOPROGRESS: PHP に CURL 転送の進行状況バーを表示させたくない場合は、このオプションをゼロ以外の値に設定します。注: PHP はこのオプションをゼロ以外の値に自動的に設定します。このオプションはデバッグ目的でのみ変更してください。
• CURLOPT_NOBODY : 出力に本文部分を含めたくない場合は、このオプションをゼロ以外の値に設定します。
• CURLOPT_FAILONERROR: エラーが発生した場合 (HTTP コードが 300 以上を返す場合) に PHP を表示しない場合は、このオプションをゼロ以外の値に設定します。デフォルトの動作では、通常のページが返され、コードは無視されます。
• CURLOPT_UPLOAD: PHP にアップロードの準備をさせたい場合は、このオプションをゼロ以外の値に設定します。
• CURLOPT_POST: PHP で通常の HTTP POST を実行する場合は、このオプションをゼロ以外の値に設定します。この POST は通常の application/x-www-from-urlencoded タイプで、主に HTML フォームで使用されます。
• CURLOPT_FTPLISTONLY: このオプションをゼロ以外の値に設定すると、PHP は FTP のディレクトリ名をリストします。
• CURLOPT_FTPAPPEND : このオプションをゼロ以外の値に設定すると、PHP はリモート ファイルを上書きせずに適用します。
• CURLOPT_NETRC: このオプションをゼロ以外の値に設定すると、PHP は ~./netrc ファイル内で接続先のリモート サイトのユーザー名とパスワードを検索します。
• CURLOPT_FOLLOWLOCATION: このオプションをゼロ以外のヘッダー ("Location: " など) に設定すると、サーバーはそれを HTTP ヘッダーの一部として送信します (これは再帰的であることに注意してください。PHP は "Location: " のようなヘッダーを送信します)。
• CURLOPT_PUT: HTTP を使用してファイルをアップロードするには、このオプションをゼロ以外の値に設定します。このファイルをアップロードするには、CURLOPT_INFILE オプションと CURLOPT_INFILESIZE オプションを設定する必要があります。
• CURLOPT_MUTE: このオプションをゼロ以外の値に設定すると、PHP は CURL 関数に対して完全にサイレントになります。
• CURLOPT_TIMEOUT: 最大秒数として長整数を設定します。
• CURLOPT_LOW_SPEED_LIMIT: 送信されるバイト数を制御する長整数を設定します。
• CURLOPT_LOW_SPEED_TIME: 長整数を設定して、CURLOPT_LOW_SPEED_LIMIT で指定されたバイト数を送信する秒数を制御します。
• CURLOPT_RESUME_FROM: バイト オフセット アドレス (転送先の開始フォーム) を含む長いパラメータを渡します。
• CURLOPT_SSLVERSION: SSL バージョンを含む長いパラメータを渡します。デフォルトでは、PHP は独自のハードワークを実行しますが、セキュリティを強化するには手動で設定する必要があります。
• CURLOPT_TIMECONDITION: 長いパラメータを渡して、CURLOPT_TIMEVALUE パラメータの処理方法を指定します。このパラメータは TIMECOND_IFMODSINCE または TIMECOND_ISUNMODSINCE に設定できます。これはHTTPのみの場合です。
• CURLOPT_TIMEVALUE: 1970 年 1 月 1 日から現在までの秒数を渡します。この時間は、CURLOPT_TIMEVALUE オプション、またはデフォルトの TIMECOND_IFMODSINCE によって指定された値として使用されます。

次のオプションの値は文字列として扱われます:

• CURLOPT_URL: これは、PHP を使用して取得する URL アドレスです。このオプションは、curl_init() 関数を使用した初期化中に設定することもできます。
• CURLOPT_USERPWD: [ユーザー名]:[パスワード] の形式で文字列を渡し、PHP を使用して接続します。
• CURLOPT_PROXYUSERPWD: [ユーザー名]:[パスワード] の形式で文字列を渡し、HTTP プロキシに接続します。
• CURLOPT_RANGE: 指定したい範囲を渡します。 X または Y を除いた「X-Y」形式である必要があります。 HTTP 転送では、カンマ (X-Y、N-M) で区切られた複数の間隔もサポートされます。
• CURLOPT_POSTFIELDS: すべてのデータを含む文字列を HTTP "POST" 操作として渡します。
• CURLOPT_REFERER: HTTP リクエスト内の「リファラー」ヘッダーを含む文字列。
• CURLOPT_USERAGENT: HTTP リクエスト内の「user-agent」ヘッダーを含む文字列。
• CURLOPT_FTPPORT: ftp の「POST」コマンドで使用される IP アドレスを含む IP アドレスを渡します。この POST コマンドは、指定した IP アドレスに接続するようにリモート サーバーに指示します。この文字列には、IP アドレス、ホスト名、ネットワーク インターフェイス名 (UNIX の場合)、または「-」 (システムのデフォルトの IP アドレスを使用) を指定できます。
• CURLOPT_COOKIE: HTTP Cookie を含むヘッダー接続を渡します。
• CURLOPT_SSLCERT: 証明書を含む文字列を PEM 形式で渡します。
• CURLOPT_SSLCERTPASSWD: CURLOPT_SSLCERT 証明書を使用するために必要なパスワードを含むパスワードを渡します。
• CURLOPT_COOKIEFILE: Cookie データを含むファイルの名前を含む文字列を渡します。この Cookie ファイルは、Netscape 形式であることも、ファイルに保存されている HTTP スタイルのヘッダーのスタックであることもできます。
• CURLOPT_CUSTOMREQUEST: HTTP リクエストを行うときに、GET または HEAD で使用される文字を渡します。 HTTP リクエストを実行するときに GET または HEAD の代わりに使用される文字列を渡します。これは、HTTP リクエストを実行する場合や、よりわかりにくい別の HTTP リクエストを実行する場合に便利です。次のオプションには、ファイルの説明 (fopen() 関数を使用して取得) が必要です:
• CURLOPT_FILE: このファイルは、配置して送信する出力ファイルになります。デフォルトは STDOUT です。
• CURLOPT_INFILE: このファイルは、送信した入力ファイルです。
• CURLOPT_WRITEHEADER: このファイルには出力のヘッダー部分が含まれます。
• CURLOPT_STDERR: このファイルには、stderr の代わりにエラーが書き込まれています。ログインが必要なページの取得例 現在の方法は毎回ログインですが、必要な方は改善していきます

[CONTENT_TYPE] => multipart/form-data; 境界=——————————-f924413ea122

http_build_query($post_data) を使用する場合、受信される CONTENT_TYPE は次のとおりです:
[CONTENT_TYPE] => application/x-www-form-urlencoded

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629902.html技術記事この記事では、PHP の CURLOPT_POSTFIELDS パラメーターでの配列と文字列の使用の違いについて説明します。詳しく知りたい方は、ぜひ参照してください。 PHP の CURL コンポーネントは HTTP で非常によく使用されます...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート