WordPress中使用wp_remote_get/post等API取代cURL

插件中涉及获取远程资源,我一般使用PHP
提供的curl
方法,但测试发现一些主机curl
存在兼容性问题,尤其是在iis
+ php
的环境中。经过查阅相关资料,发现 WordPress 已经封装了部分 HTTP API,遂替换之,问题解决。
wp_remote 系列 API
- wp_remote_request(string $url, array $args)
WordPress 封装的 HTTP 通用请求函数,可用来执行GET
、POST
、PUT
、DELETE
等几乎所有 HTTP 请求。下面用代码举个栗子://函数声明见 wp-includes/http.php $response = wp_remote_request( 'http://Www.azimiao.com/user.php', array( 'method' => 'DELETE', 'httpversion' => '1.1', 'headers' => array( 'Content-Type' => 'application/json', ), 'body' => wp_json_encode( array('userid'=>1001) ) ) ); $body = wp_remote_retrieve_body($response); echo $body;
- wp_safe_remote_request($url, $args)
wp_remote_request
的高安全版本,访问任意 url 时避免重定向与劫持攻击。 - wp_remote_get($url, $args)
wp_remote_request
的GET
特例,即method
默认为GET
。
使用方法同wp_remote_request
(不建议使用body)。 - wp_safe_remote_get($url, $args)
wp_remote_get
的高安全版本,访问任意 url 时避免重定向与劫持攻击。 - wp_remote_post($url, $args)
wp_remote_request
的POST
特例,即method
默认为POST
。
使用方法同wp_remote_request
。 - wp_safe_remote_post($url, $args)
wp_remote_post
的高安全版本,访问任意 url 时避免重定向与劫持攻击。 - wp_remote_head($url, $args)
wp_remote_request
的HEAD
特例,即method
默认为HEAD
。
使用方法同wp_remote_request
。
使用实例
我在追番插件里使用了wp_remote_get
与wp_remote_post
,将它们封装在同一个对象中,方便在各处调用:
/**
* WP_REMOTE方法的易用封装
* @author Yetu <admin@azimiao.com>
*/
class WPNetwork{
public static function http_get_contents($_url,$_getHeader = array())
{
$m_req = wp_remote_get($_url,array("headers"=>$_getHeader));
$m_res = wp_remote_retrieve_body($m_req);
return $m_res;
}
//post获取内容
public static function http_post_contents($_url,$_postHeader = array(),$_postBody = array())
{
$m_req = wp_remote_post($_url,array('headers'=>$_postHeader,'body' => $_postBody));
$m_res = wp_remote_retrieve_body($m_req);
return $m_res;
}
}
我一个用 Typecho 的为什么要来看(逃
昨天在你这里看到,一翻代码,原来2.9就有这组函数了……
能控制走或者不走wp-config里设的代理吗?我测试默认是走。