当我将要作为cURL选项发布的数据数组(通过CURLOPT_POSTFIELDS)分配时,我是否需要首先对该数据进行urlencode处理还是将其处理?
答案 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) );