网站开发模,wordpress 干嘛的,西安网站seo厂家,莱芜网络推广公司哪里有PHP的CURL组件是非常常用的HTTP请求模拟器。通常要发送post数据时#xff0c;我已经习惯于这样写#xff1a;curl_setopt( $ch, CURLOPT_POSTFIELDS,$post_data);但是在向某一个服务器发送请求的时候#xff0c;服务器返回500。而使用socket方式连接上去发送请求#xff0c…PHP的CURL组件是非常常用的HTTP请求模拟器。通常要发送post数据时我已经习惯于这样写curl_setopt( $ch, CURLOPT_POSTFIELDS,$post_data);但是在向某一个服务器发送请求的时候服务器返回500。而使用socket方式连接上去发送请求返回正常的数据。尝试发送到一个仅有?php print_r($_SERVER);?的网页上可以看到使用数组发送POST数据时收到的CONTENT_TYPE如下[CONTENT_TYPE]  multipart/form-data; boundary—————————-f924413ea122而使用http_build_query($post_data)收到的CONTENT_TYPE如下[CONTENT_TYPE]  application/x-www-form-urlencoded可见当CURLOPT_POSTFIELDS被设置为数组时HTTP头会发送Content_type: application/x-www-form-urlencoded。这个是正常的网页提交表单时浏览器发送的头部。而multipart/form-data我们知道这是用于上传文件的表单。包括了boundary分界符会多出很多字节。手册上提到The full data to post in a HTTP “POST” operation. To post a file, prepend a filename with  and use the full path. This can either be passed as a urlencoded string like ‘para1val1para2val2…’ or as an array with the field name as key and field data as value.If value is an array, the Content-Type header will be set to multipart/form-data.使用数组提供post数据时CURL组件大概是为了兼容filename这种上传文件的写法默认把content_type设为了multipart/form-data。虽然对于大多数web服务器并没有影响但是还是有少部分服务器不兼容。本文得出的结论是在没有需要上传文件的情况下尽量对post提交的数据进行http_build_query然后发送出去能实现更好的兼容性更小的请求数据包。