关键词搜索

全站搜索
×
密码登录在这里
×
注册会员

已有账号? 请点击

忘记密码

已有账号? 请点击

使用其他方式登录

PHP中curl Content-Type:多出boundary=

发布2023-11-28 浏览170次

详情内容

今天遇到一个很奇怪的问题,因为换服务器,同时的代码在旧服务器上用PHP curl跑一个接口,在新服务器死活报错。显示编码有问题。

经过一番的打印输出print_r(curl_getinfo($curl)),发现,在请头部多出来了boundary=---------bou的结尾,在旧的服务器上却没有。

image.png


在查阅的很多资料,总结出一般curl只有三种类型的数据,

1、application/x-www-form-urlencoded ,却请求头里是:Content-Type: application/json

另一个常见的 POST 数据提交的方式, Form 表单的 enctype 设置为multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符(这就是boundary的作用)分开,类似我们上面Content-Type中的例子。
 由于这种方式将数据有很多部分,它既可以上传键值对,也可以上传文件,甚至多个文件。当上传的字段是文件时,会有Content-Type来说明文件类型;Content-disposition,用来说明字段的一些信息。每部分都是以 –boundary 开始,紧接着是内容描述信息,然后是回车,最后是字段具体内容(字段、文本或二进制等)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 –boundary– 标示结束。


2、multipart/form-data,却请求头里是:Content-Type: multipart/form-data

3、application/json,却请求头里是:application/json

解决办法,因为不同版本和环境对兼容性问题,对 post 提交的数据进行 http_build_query 处理,然后再发送出去,能实现更好的兼容性,更小的请求数据包。

即在post处理数据:

if ($method == 'POST') curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));

这样就正常了。

点击QQ咨询
开通会员
上传资源赚钱
返回顶部
×
  • 微信支付
  • 支付宝付款
扫码支付
微信扫码支付
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载