PHP中CURL的CURLOPT_POSTFIELDS参数使⽤细节
在通常情况下,我们使⽤ CURL 来提交 POST 数据的时候,我们已经习惯了这样的写法:复制代码 代码如下:
curl_setopt( $ch, CURLOPT_POSTFIELDS,$post_data);
但是这样的写法在有时候并不会很好⽤,可能会得到服务器返回的 500 错误。但是我们尝试在使⽤ Socket ⽅式向服务器提交数据的时候,我们会得到⾮常正确的结果。
例如我们在服务器上⾯存在⼀个如下的 PHP ⽂件:复制代码 代码如下:
当我们采⽤ CURL 在不注意细节的前提下向服务器发送⼀些数据,我们可能得到下⾯这样的结果,这不是我们理想中的结果:
复制代码 代码如下:
[CONTENT_TYPE] => multipart/form-data; boundary=—————————-f924413ea122
但是如果我们在采⽤ http_build_query($post_data) 来替代 $post_data 再向这个 PHP 脚本提交数据的时候,我们就会得到和上⾯不同的结果,这才是我们理想中的结果:复制代码 代码如下:
[CONTENT_TYPE] => application/x-www-form-urlencoded
从上⾯这个例⼦中不难看出,使⽤ CURL 并且参数为数据时,向服务器提交数据的时候,HTTP头会发送Content_type:
application/x-www-form-urlencoded。这个是正常的⽹页