当我分配要作为 cURL 选项发布的数据数组时(通过 CURLOPT_POSTFIELDS),我是否需要先对该数据进行 urlencode 或将其处理?
Uberfuzzy
问问题
20499 次
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
,这就解释了为什么它不需要进行 urlencoded(你和 cURL 都不是),如果你想上传文件,你需要使用一个数组. 如果您http_build_query()
首先(并将其作为字符串发送),它将被视为application/x-www-form-urlencoded
.
于 2009-02-22T04:10:48.610 回答
1
为 CURLOPT_POSTFIELDS 使用数组的一个问题是您不能有一个空值的名称-值对。
于 2009-02-22T13:56:01.090 回答
1
我用:
curl_setopt($curl , CURLOPT_POSTFIELDS, $array );
代替:
curl_setopt($curl , CURLOPT_POSTFIELDS, http_build_query($array) );
于 2017-11-22T07:47:51.923 回答
0
POST 数据不会添加到 URL(如 GET),因此您不需要对其进行 URL 编码。
于 2009-02-22T04:12:04.053 回答