插件中涉及获取远程资源,我一般使用PHP提供的curl方法,但测试发现一些主机curl存在兼容性问题,尤其是在iis + php的环境中。经过查阅相关资料,发现 WordPress 已经封装了部分 HTTP API,遂替换之,问题解决。

wp_remote 系列 API

  • wp_remote_request(string $url, array $args)
    WordPress 封装的 HTTP 通用请求函数,可用来执行GETPOSTPUTDELETE等几乎所有 HTTP 请求。下面用代码举个栗子:

    //函数声明见 wp-includes/http.php
    $response = wp_remote_request( 'http://xxx.xxx/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_requestGET特例,即method默认为GET
    使用方法同wp_remote_request(不建议使用body)。
  • wp_safe_remote_get($url, $args)
    wp_remote_get的高安全版本,访问任意 url 时避免重定向与劫持攻击。
  • wp_remote_post($url, $args)
    wp_remote_requestPOST特例,即method默认为POST
    使用方法同wp_remote_request
  • wp_safe_remote_post($url, $args)
    wp_remote_post的高安全版本,访问任意 url 时避免重定向与劫持攻击。
  • wp_remote_head($url, $args)
    wp_remote_requestHEAD特例,即method默认为HEAD
    使用方法同wp_remote_request

使用实例

我在追番插件里使用了wp_remote_getwp_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;
        }
    }
梓喵出没博客(azimiao.com)版权所有,转载请注明链接:https://www.azimiao.com/5970.html
欢迎加入梓喵出没博客交流群:313732000

我来吐槽

*

*

0位绅士参与评论

  1. 大致03-20 12:09 回复

    昨天在你这里看到,一翻代码,原来2.9就有这组函数了……
    能控制走或者不走wp-config里设的代理吗?我测试默认是走。

  2. c0sMx03-20 07:46 回复

    我一个用 Typecho 的为什么要来看(逃