当我将一个数据数组作为cURL选项(通过CURLOPT_POSTFIELDS)分配时,我是否需要首先对该数据进行urlencode或将其处理?
C实现curl_setopt
似乎不对文本进行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 );
您不必首先使用urlencode.但是,重要的是要意识到传递一个数组会使cURL发送它multipart/form-data
,这解释了为什么它不需要urlencoded(既不是你也不是cURL),如果你想上传文件你需要使用一个数组.如果你是http_build_query()
第一个(并将其作为字符串发送),它将被视为application/x-www-form-urlencoded
.