在WordPress中实现发送http请求的相关函数解析


Posted in PHP onDecember 29, 2015

在 PHP 中发送 Http 请求(GET / POST)有很多的方法,比如 file_get_contents() 函数、fopen() 函数或者 cURL 扩展,但由于服务器的情况不同,所以不一定会兼容所有情况,这样想要发送 Http 请求则需要经过一系列的判断,非常麻烦。

不过 WordPress 提供了一个 WP_Http 的类来帮你做好兼容性的判断,你只需要调用里边的函数就能完成发送 Http 请求。下面我就简单的介绍一下这个类的常用函数。

发送 GET 请求

/**
 *使用 WP_Http 类发送简单的 GET 请求
 *http://www.endskin.com/wp_http/
*/
$http = new WP_Http;
$result = $http->request( 'http://www.endskin.com' );

上边的代码就把请求目标的信息存储到 $result 变量里了,$result 是一个数组,它有一下的键:

  • headers:返回的 headers 信息,是一个数组
  • body:目标的内容,和在浏览器里直接看是一样的
  • response:返回的代码,如果请求成功会返回 array( 'code'=>200, 'message'=>'OK' )
  • cookies:Cookie 信息,是一个数组

也就是说目标的内容就是 $result['body']

发送 POST 请求

如果需要发送 POST 请求就得用到 WP_Http->request() 的第二个参数了,下面看例子:

/**
 *使用 WP_Http 类发送简单的 POST 请求
 *http://www.endskin.com/wp_http/
*/
$http = new WP_Http;
$post = array( 'name' => '斌果', 'blog' => 'http://www.bgbk.org' );
$result = $http->request( 'http://www.endskin.com', array( 'method' => 'POST', 'body' => $post ) );

返回的$result 变量内容请参考上边的 GET 请求。

需要验证的 POST 请求

假如你想在一些 RESTFul 的 API 提交一些信息,你首先需要进行验证,我们需要发送一个含有用户名和密码对的 base64 编码的字符串给 API,详细如下:

// You would edit the following:
$username = 'denishua'; // login
$password = '123456'; // password
$message = "I'm posting with the API";
// Now, the HTTP request:
$api_url = 'http://your.api.url/update.xml';
$body = array( 'status' => $message );
$headers = array( 'Authorization' => 'Basic '.base64_encode("$username:$password") );
$request = new WP_Http;
$result = $request->request( $api_url , array( 'method' => 'POST', 'body' => $body, 'headers' => $headers ) );

WordPress 加入 WP_Http 类之后,就放弃了 Snoopy 这个 PHP Class,所以建议大家给 WordPress 写插件的时候,尽量使用 WP_Http 来做 HTTP 请求。

PHP 相关文章推荐
PHP的FTP学习(一)
Oct 09 PHP
WINXP下apache+php4+mysql
Nov 25 PHP
Smarty Foreach 使用说明
Mar 23 PHP
Base64在线编码解码实现代码 演示与下载
Jan 08 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 PHP
php根据用户语言跳转相应网页
Nov 04 PHP
golang与php实现计算两个经纬度之间距离的方法
Jul 22 PHP
PHP中的访问修饰符简单比较
Feb 02 PHP
php+ajax实现文件切割上传功能示例
Mar 03 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 #PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 #PHP
Yii使用技巧大汇总
Dec 29 #PHP
PHP实现批量上传单个文件
Dec 29 #PHP
使用phpstorm和xdebug实现远程调试的方法
Dec 29 #PHP
PHP远程调试之XDEBUG
Dec 29 #PHP
从性能方面考虑PHP下载远程文件的3种方法
Dec 29 #PHP
You might like
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
js实现简单的验证码
2015/12/25 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
Python写的贪吃蛇游戏例子
2014/06/16 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
Flask之flask-script模块使用
2018/07/26 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
python flask中动态URL规则详解
2019/11/22 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
全球最大的服务市场:Fiverr
2017/01/03 全球购物
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
创业计划书中要认真思考的问题
2013/12/28 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
教师读书笔记
2015/06/29 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis