核心提示:CURL确实是一个不错的好工具,不仅在PHP中还是其他的操作系统中,都是一个非常好用的。但是如果你有些参数没有用好的话,那可能会得不到自己理想中的结果。

CURL确实是一个不错的好工具,不仅在PHP中还是其他的操作系统中,都是一个非常好用的。但是如果你有些参数没有用好的话,那可能会得不到自己理想中的结果。

在通常情况下,我们使用 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。这个是正常的网页

提交表单时,浏览器发送的头部。而 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 ‘para1=val1¶2=val2&…' 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。虽然对于大多数服务器并没有影响,但是还是有少部分服务器不兼容。

经过一番总结最终得出结论:在没有需要上传文件的情况下,尽量对 post 提交的数据进行 http_build_query 处理,然后再发送出去,能实现更好的兼容性,更小的请求数据包。

php curl curlopt_getfields,PHP中CURL的CURLOPT_POSTFIELDS参数使用细节相关推荐

  1. php获取curl头_php中CURL请求头和响应头获取方法

    本文主要和大家分享php中CURL请求头和响应头获取方法,希望能帮助到大家. 1.从CURL中获取响应头$oCurl = curl_init(); // 设置请求头, 有时候需要,有时候不用,看请求网 ...

  2. php curl cookie,php中curl获取返回页面的cookie

    php的curl可以模仿用户浏览网页并且获取网页的cookie,获取cookie还有专用的参数如CURLOPT_COOKIEJAR 用于保存 cookie 到文件了,下面一起来看几个例子吧. curl ...

  3. wget 和scp对比_Linux中curl命令和wget命令的使用介绍与比较

    本文介绍的是Linux中curl命令和wget命令,这两者都是用来下载文件的工具,下面来看看详细的介绍: 一.wget wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 ...

  4. linux wget返回值_Linux中curl命令和wget命令的使用介绍与比较

    原文链接: 这篇文章主要给大家介绍了Linux中curl命令和wget命令使用以及这两者之间的区别比较,curl和wget命令都是Linux下的工具,可以用来下载文件.文中介绍的非常详细,相信对大家具 ...

  5. Linux中curl命令详解(做定时任务超级有用)!

    Linux curl命令详解 命令:curl 在kingle中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具, ...

  6. PHP中curl的CURLOPT_POSTFIELDS请求时,Content-Type多出boundary=------------------------

    当我们采用 CURL 在不注意细节的前提下向服务器发送一些数据,得到请求头的CONTENT_TYPE: [CONTENT_TYPE] => multipart/form-data; bounda ...

  7. php中curl的详解

    这几天在帮一些同学处理问题的时候,突然发现这些同学是使用file_get_contents()函数来采集页面内容的,貌似都没有curl的概念亦或是对这种工具特别不敏感, 本文我来给大家详细介绍下cUR ...

  8. curl 视频vip接口 php,php中CURL的使用方法及详解教程

    使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下几个步骤: 1.初始化连接句柄: 2.设置CURL选项: 3.执行并获取结果: 4.释放VURL连接句柄. 下面的程序片段是使用CURL发送 ...

  9. php中curl模拟post提交多维数组

    今天需要用curl模拟post提交参数,请求同事提供的一个接口:但是传递的参数中,有一个参数的值为数组,用普通的curl post代码提交,会报错误 PHP Notice:  Array to str ...

最新文章

  1. 【控制】影响系统响应的因素
  2. 云原生ASP.NET Core程序的可监测性和可观察性
  3. impala的详细介绍--图文描述
  4. 判断php对象不包含的key,如何判断一个对象是否包含指定Key
  5. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(三)密码修改以及密码重置...
  6. JSTL 核心标签库标签共有13个
  7. 简明python教程:数据结构
  8. 关于 Pycharm专业版 安装教程,简单好用
  9. Win10 多出4个显示器无法删除的“通用非即插即用监视器”问题解决
  10. 删好友警告,C语言最强整人小程序!(勿随便使用)
  11. oracle内连接左连接右连接,ORACLE 左连接 右连接 内连接 区别
  12. 免费试用版CRM客户管理系统如何选择?
  13. 计算机cpu架构是什么意思,「电脑小白必备」一分钟快速了解CPU
  14. 共享充电宝还有市场嘛?
  15. PXE无人值守安装系统
  16. Web前端_邮箱的正则表达式
  17. win10系统禁用笔记本自带键盘
  18. iic获取salve设备地址_Linux下使用IIC总线读写EEPROM(读写i2c从设备通用程序)
  19. 服务数据库已锁定 两个可能
  20. C语言_入门_我和编程

热门文章

  1. [USACO12MAR]花盆Flowerpot 二分答案+单调队列
  2. mysql 5.1升级5.6_mysql 5.1.71升级到5.6.30
  3. 查看grafana版本_使用 Prometheus 与 Grafana 为 Kubernetes 集群建立监控与警报机制
  4. ap接口 php_小白php API初体验 php api文档 php api接口开发 php web ap
  5. python的pass在函数中的作用_Pass Share:Python / Julia 中函数变量的传递机制
  6. redis续期_面试官:Redis分布式锁如何解决锁超时问题的?
  7. 网易云音乐电脑版怎么下载电台节目 主播电台节目下载教程
  8. Win11桌面没有图标怎么解决 Win11桌面没有图标解决教程
  9. 2021聊城二中高考成绩查询,聊城中考成绩查询时间2021
  10. JAVA分布式篇1——Linux