20

(CURLOPT_POSTFIELDS を介して) cURL オプションとして POST されるデータの配列を割り当てる場合、最初にそのデータを urlencode する必要がありますか?それとも処理されますか?

4

5 に答える 5

31

の C 実装はcurl_setopt、テキストを URL エンコードしていないようです。ただし、PHP5 では、関数URL エンコードされhttp_build_queryた配列のクエリ文字列表現を返します。

使用例

  $curl_parameters = array(
    'param1' => $param1,
    'param2' => $param2
  );

  $curl_options = array(
    CURLOPT_URL => "http://localhost/service",
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query( $curl_parameters ),
    CURLOPT_HTTP_VERSION => 1.0,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => false
  );

  $curl = curl_init();
  curl_setopt_array( $curl, $curl_options );
  $result = curl_exec( $curl );

  curl_close( $curl );
于 2009-02-22T03:18:38.580 に答える
14

最初に urlencode する必要はありません。ただし、配列を渡すと cURL がそれを として送信することを理解することが重要ですmultipart/form-data。これは、(あなたも cURL も) urlencoded を取得する必要がない理由を説明しており、ファイルをアップロードする場合は配列を使用する必要があります。 . 最初にhttp_build_query()(そして文字列として送信すると) として扱われapplication/x-www-form-urlencodedます。

于 2009-02-22T04:10:48.610 に答える
1

CURLOPT_POSTFIELDSに配列を使用する場合の問題の1つは、空の値を持つ名前と値のペアを使用できないことです。

于 2009-02-22T13:56:01.090 に答える
0

POSTデータは(GETのように)URLに追加されないため、URLエンコードする必要はありません。

于 2009-02-22T04:12:04.053 に答える