如何使用CURL发送数组?我应该'urlencode`吗?

时间:2009-02-22 03:14:33

标签: php post curl urlencode

当我将要作为cURL选项发布的数据数组(通过CURLOPT_POSTFIELDS)分配时,我是否需要首先对该数据进行urlencode处理还是将其处理?

5 个答案:

答案 0 :(得分:30)

curl_setopt的C实现似乎不对文本进行URL编码。但是,在PHP5中,http_build_query函数返回 URL编码的数组的查询字符串表示。

使用示例

  $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 );

答案 1 :(得分:14)

您不必首先使用urlencode。但是,重要的是要认识到传递数组会使cURL将其作为multipart/form-data发送,这解释了为什么它不需要进行urlencoded(既不是你也不是cURL),你需要使用一个数组你想上传文件。如果您先http_build_query()(并将其作为字符串发送),则会将其视为application/x-www-form-urlencoded

答案 2 :(得分:1)

对CURLOPT_POSTFIELDS使用数组的一个问题是,您不能使用空值的名称 - 值对。

答案 3 :(得分:0)

POST数据未添加到URL(如GET),因此您无需对其进行URL编码。

答案 4 :(得分:0)

我用:

curl_setopt($curl , CURLOPT_POSTFIELDS, $array );

而不是:

curl_setopt($curl , CURLOPT_POSTFIELDS, http_build_query($array)  );