在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中使用sockets:从新闻组中获取文章
Oct 09 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 PHP
php使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 PHP
使用php的mail()函数实现发送邮件功能
Jun 03 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
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
php数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
python之yield和Generator深入解析
2019/09/18 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
Python高并发和多线程有什么关系
2020/11/14 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
荷兰皇家航空公司官方网站:KLM Royal Dutch Airlines
2017/12/07 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
英语系本科生求职信
2014/07/15 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
元宵节寄语大全
2015/02/27 职场文书
大学生入党自传2015
2015/06/26 职场文书
庆七一主持词
2015/06/29 职场文书
大学开学感言
2015/08/01 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技