在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 相关文章推荐
动态生成gif格式的图像要注意?
Oct 09 PHP
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
Sep 22 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
php for 循环使用的简单实例
Jun 02 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
PHP中的函数声明与使用详解
May 27 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
PHP伪静态页面函数附使用方法
2008/06/20 PHP
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
基于empty函数的输出详解
2013/06/17 PHP
php实现查看邮件是否已被阅读的方法
2013/12/03 PHP
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
PHP7匿名类的用法示例
2019/04/05 PHP
js 处理URL实用技巧
2010/11/23 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
Python随机生成彩票号码的方法
2015/03/05 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
个人简历自我评价范文
2014/02/04 职场文书
石油工程专业毕业生求职信
2014/04/13 职场文书
优秀护士先进事迹
2014/05/08 职场文书
病媒生物防治方案
2014/05/13 职场文书
大学生求职信
2014/06/17 职场文书
2014年施工员工作总结
2014/11/18 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
企业培训简报范文
2015/07/20 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android