引言

前天的文章,我们说到了如何高效的下载网络资源,对于小体积的文件。可以便捷的使用 file_put_contents() 进行请求。与之配对的函数 file_get_contents() 则是读取资源。

今天我们讨论一下,有没有一种可能,使用一个函数,就可以给服务器发送post请求的数据呢?

学习时间

上一段中我们已经提示了,有一个函数可以用于读取网络资源,也就是间接的发起网络请求。默认 file_get_contents() 是使用 GET 请求,如果是POST请求按道理也应该做的来。不过要怎么写呢?

file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。

其参数形式如下:

string file_get_contents( string $filename[, bool $use_include_path = false[, resource $context[, int $offset = -1[, int $maxlen]]]] )

复杂的功能,我们需要组装后面的参数即可。我们需要使用流操作的上下文 context,传入该函数。

首先构造请求的参数,也就是键值对,这里需要使用 & 进行多参数连接:

$postdata = http_build_query(    array(        'name' => 'joe',        'age' => '13'    ));

接着构造请求结构体:

$opts = array('http' =>    array(        'method'  => 'POST',        'header'  => 'Content-Type: application/x-www-form-urlencoded',        'content' => $postdata    ));

最重要的一步,创建基于流的上下文,使用

$context  = stream_context_create($opts);

写到这里就“万事俱备只欠东风”了。我们隆重地清楚主旨函数处理这些参数:

$result = file_get_contents('http://example.com/submit.php', false, $context);

之后结果,或者错误内容,就会输出到 $result 对象。使用 false 判断,或者使用已知的接口返回数据类型,进一步处理。

深度定制

上一节的内容并没有考虑网络超时,接口授权,等等情形。本节我们说一个复杂度高一些的,要求处理一个https请求,并配置了 basic auth 的 url,并使用 post 上传数据。

首先还是裁剪请求体:

$opts = array('http' =>  array(    'method'  => 'POST',    'header'  => "Content-Type: text/xml.Authorization: Basic ".base64_encode("$https_user:$https_password")."",    'content' => $body,    'timeout' => 60  ));

注意我们在请求上添加了 header,这是根据目标 url 的要求添加的。$body 就是上一节中的 $postdata 结构类型。

接着创建流上下文:

$context  = stream_context_create($opts);

最后调用函数:

$url = 'https://'.$https_server;$result = file_get_contents($url, false, $context, -1, 40000);

写在最后

通过上面两个细节的函数处理,大家是不是对 file_get_contents() 有了更加深入的看法,原来这家伙还可以这么用,真是开了眼界!

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

bcb6通过https接口post数据_3分钟短文 | 有挑战!PHP用1个函数实现post请求,你用哪个?相关推荐

  1. bcb6通过https接口post数据_Python+Requests+Pytest+YAML+Allure实现接口自动化

    点击上方"编程派",选择设为"设为星标" 优质文章,第一时间送达! 本项目实现接口自动化的技术选型:Python+Requests+Pytest+YAML+Al ...

  2. 安卓应用用户数据_3分钟短文:Laravel应用跟用户打交道,就从拿到他们的数据开始!...

    引言 本来讲完路由和控制器,应该接着讲一讲视图的,但是鉴于视图的功能实在太枯燥,况且是前端页面,免不了写一些js和css.而laravel是偏重后端的,所以为了给后端的开发同学缓冲的时间,我们跳过视图 ...

  3. vfp 调用接口取数据_2分钟教你调用全国天气预报数据接口

    在智能手机软件的装机量中,天气预报的APP排在比较靠前的位置.说明大家对天气的关注度还是比价高的,毕竟无论工作还是度假旅游等各种活动都需要根据自然天气来安排. 那么,接下来就花2分钟,聚合菌教你如何调 ...

  4. rpa调用https接口 返回数据异常_金融企业“银行余额RPA查询机器人”解读

    一.财务机器人应用背景 公司简介 金融行业银行卡联合组织--是只通过银联跨行交易清算系统,实现商业银行系统间的互联互通和资源共享,保证银行卡跨行.跨地区和跨境的使用的组织. 总部设于上海,作为中国的银 ...

  5. request用法_3分钟短文:说说Laravel页面会话之间的数据保存Session用法

    引言 我们知HTTP请求是没有状态的,两个请求之间没有直接的关联关系.但大多数情况下, 我们需要保持用户的会话间数据的连续性,这时,为了数据安全起见, 有必要在服务器上临时存储一些上下文数据了. 这就 ...

  6. laravel $request 多维数组取值_3分钟短文:Laravel的“南天门”,过滤掉七七八八的数据...

    引言 上一章我们教会大家如何从用户表单内正确地获取数据,可是没有讲,获取到的数据到底有啥用,或者说,有的用户提交的数据压根儿就没正经填,那些错乱无效的数据,如果直接放到数据库,纯粹是对数据库的污染. ...

  7. 接口怎么获取数组底下的数组_3分钟短文 | PHP数组获取最后一个元素,10个方式中哪个有错?...

    引言 我们对于 PHP 的数组操作乐此不疲,为什么?因为 PHP 编程你几乎时时刻刻都在于数组打交道,对于数组的操作熟练程度,很大一部分因素关系着代码的优劣. 今天我们来说说,如何获取数组的最后一个元 ...

  8. laravel $request 多维数组取值_3分钟短文 | Laravel 内3种数据校验的写法,你喜欢哪一个?...

    引言 web应用程序公开访问几乎没有不带用户交互的,难免要接收用户输入的奇奇怪怪的东西.对于后端程序,必须对输入的内容进行有效性过滤. 这就是本文的重点,说一说laravel中输入请求的校验. 学习时 ...

  9. 使用proxy转发post请求_3分钟短文 | Linux 使用curl发起post请求的4个常用方式

    引言 cURL是一种命令行实用程序,用于使用一种受支持的协议,从远程服务器传输数据,或将数据传输到远程服务器.默认情况下,已安装在macOS和大多数Linux发行版上. 开发人员可以使用cURL来测试 ...

最新文章

  1. 用计算机计算教学反思,《用计算器计算》教学反思
  2. Spy++的使用方法及下载
  3. python下载文件到本地-python从下载链接下载文件到本地
  4. 7.泡妞与设计模式(八)模板模式
  5. Code First 迁移
  6. SAP Spartacus B2B 页面 Popover Component 的条件显示逻辑
  7. 掌握AI核心技术没有秘籍,能自己创造就是王道
  8. cocos2dx进阶学习之CCAction
  9. android plot,androidplot行不显示
  10. unity 彩带粒子_随机四处散发的粒子光带效果unity3d源码下载!Unity3D Particle Ribbon粒子带源码下载...
  11. word论文排版插件_这是我见过最强大的Word插件!论文、报告、标书、规范全搞定...
  12. 05.odoo12开源框架学习
  13. Java如何实现贪吃蛇小游戏
  14. 辞职信:写给我的“藤野先生”
  15. canvas学习(html5)画画
  16. Dubbo源码分析(一):概览
  17. Java Web之Ajax
  18. 做一个网站多少钱?建一个网站要多少钱?
  19. 如何利用Matlab对Comtrade99格式的故障录波文件进行数据读取
  20. IDEA2022 搭建SpringMVC最新教程

热门文章

  1. 2.2使用urllib的简单传输
  2. 小技巧处理div内容溢出
  3. 斗鱼的sidebar的实现简陋的demo
  4. mysql完成字符串分割
  5. 如何获取函数的变长参数(va_list, va_start, va_arg, va_end)
  6. C# 面向对象程序设计复习
  7. CCF201812-3 CIDR合并(100分)【位运算+文本】
  8. Bailian4116 拯救行动【优先搜索】
  9. HDU2563 统计问题【递推+打表】
  10. Bailian4077 出栈序列统计【卡特兰数】(vijos P1122)