讲师中心 微信公众号
AI工具推荐 视频效率加速

WordPress REST API BasicAuth 保护下获取文章教程

老瑶小哥_2412

老瑶小哥_2412

发布时间:2025-12-03 11:34:23

|

436人浏览过

|

来源于php中文网

原创

WordPress REST API BasicAuth 保护下获取文章教程

本教程详细介绍了如何在wordpress环境中,利用`wp_remote_get()`函数访问受basicauth保护的远程wordpress站点的rest api以获取文章数据。文章将深入讲解如何通过设置http请求头中的`authorization`字段,将base64编码的用户名和密码传递给api,并提供完整的代码示例。同时,教程也强调了在使用basicauth时的注意事项和潜在的安全考量。

通过 wp_remote_get 访问 BasicAuth 保护的 WordPress REST API

在WordPress开发中,我们经常需要从其他站点获取数据。当目标站点配置了BasicAuth认证来保护其REST API时,标准的wp_remote_get()函数调用将无法直接获取数据。本教程将指导您如何扩展wp_remote_get()的功能,使其能够处理BasicAuth认证。

理解 wp_remote_get 与 BasicAuth

wp_remote_get()是WordPress核心提供的用于执行HTTP GET请求的函数,它是对WP_Http类的封装。此函数允许您通过一个参数数组来定制请求,包括设置HTTP头信息。

BasicAuth是一种简单的HTTP认证方案,它要求客户端在请求头中发送用户名和密码。具体来说,Authorization头的值格式为Basic后跟Base64编码的username:password字符串。

实施 BasicAuth 认证

要通过wp_remote_get()发送BasicAuth凭据,我们需要在请求的$args参数中添加一个headers数组,并在其中设置Authorization头。

html-deploy
html-deploy

使用 htmlcode.fun 将 HTML 内容或文件部署到网页,适用于用户要求“部署到网页”“托管此 HTML”“生成此前端...的实时链接”等场景。

下载

以下是实现这一功能的关键代码片段:

<?php
$username = 'your_api_username'; // 替换为目标站点的API用户名
$password = 'your_api_password'; // 替换为目标站点的API密码

$args = array(
    'headers' => array(
        'Authorization' => 'Basic ' . base64_encode( $username . ':' . $password ),
    ),
);

// 使用 wp_remote_get 发送带有 BasicAuth 头的请求
$response = wp_remote_get( 'https://your-target-site.com/wp-json/wp/v2/posts?per_page=2', $args );

// ... 后续处理响应的代码
?>

集成到获取文章函数中

现在,我们将上述BasicAuth逻辑集成到原有的获取文章函数中。

<?php
// 禁用直接文件访问。
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

/**
 * 通过 REST API 获取文章,支持 BasicAuth 保护。
 *
 * @param string $api_url 目标站点的 REST API 地址。
 * @param string $username BasicAuth 用户名。
 * @param string $password BasicAuth 密码。
 * @return string 格式化的文章列表 HTML。
 */
function get_posts_via_rest_with_basic_auth( $api_url, $username, $password ) {

    // 初始化变量。
    $allposts = '';

    // 构建 BasicAuth 认证头。
    $args = array(
        'headers' => array(
            'Authorization' => 'Basic ' . base64_encode( $username . ':' . $password ),
        ),
        // 可以根据需要添加其他参数,例如超时设置等
        // 'timeout'     => 10,
        // 'redirection' => 5,
        // 'httpversion' => '1.0',
        // 'blocking'    => true,
        // 'sslverify'   => false, // 在开发环境中可能需要禁用,生产环境强烈建议启用
    );

    // 发送带有 BasicAuth 认证的 GET 请求。
    $response = wp_remote_get( $api_url, $args );

    // 如果请求出错,返回。
    if ( is_wp_error( $response ) ) {
        error_log( 'WP_Remote_Get Error: ' . $response->get_error_message() );
        return '';
    }

    // 获取响应体。
    $posts = json_decode( wp_remote_retrieve_body( $response ) );

    // 如果没有返回内容,返回。
    if ( empty( $posts ) ) {
        return '';
    }

    // 如果存在文章。
    if ( ! empty( $posts ) ) {

        // 遍历每篇文章。
        foreach ( $posts as $post ) {

            // 格式化日期。
            $fordate = date( 'n/j/Y', strtotime( $post->modified ) );

            // 显示带有链接的标题和文章日期。
            $allposts .= '<a href="' . esc_url( $post->link ) . '" target="_blank">' . esc_html( $post->title->rendered ) . '</a>  ' . esc_html( $fordate ) . '<br />';
        }

        return $allposts;
    }
    return ''; // 确保在没有文章时返回空字符串
}

// 示例用法:
// 请替换为您的目标站点信息和认证凭据
$target_api_url = 'https://www.your-target-site.com/wp-json/wp/v2/posts?per_page=2';
$api_username   = 'your_api_user';
$api_password   = 'your_api_pass';

// 调用函数获取文章
// echo get_posts_via_rest_with_basic_auth( $target_api_url, $api_username, $api_password );
?>

注意事项

  1. 安全性: 直接在代码中硬编码用户名和密码存在安全风险,尤其是在公共可访问的源代码中。更好的做法是将这些凭据存储在WordPress的常量、数据库选项或环境变量中,并在需要时安全地检索它们。
  2. 用户权限: BasicAuth通常用于保护整个API端点,但目标WordPress站点上的REST API访问权限可能还需要与特定用户角色关联。确保您使用的BasicAuth凭据对应一个在目标站点上拥有读取文章权限的WordPress用户。
  3. API 访问级别: 即使使用了BasicAuth,某些高度敏感的API端点(例如管理设置)可能仍需要更高的认证机制(如OAuth)或特定的插件(如Basic Authentication handler)来处理,但对于获取公开或受限文章通常Authorization头就足够。
  4. 错误处理: 在实际应用中,务必对wp_remote_get()的响应进行充分的错误检查,包括is_wp_error()、HTTP状态码(wp_remote_retrieve_response_code())以及JSON解码结果。
  5. SSL 验证: 在生产环境中,始终确保启用SSL验证(sslverify参数默认为true)。在开发环境中,有时为了方便会暂时禁用,但这会降低安全性。

总结

通过在wp_remote_get()函数的$args参数中正确设置Authorization HTTP头,我们可以有效地访问受BasicAuth保护的WordPress REST API。这种方法简单直接,适用于许多需要从外部WordPress站点获取数据的场景。然而,开发者应始终关注安全最佳实践,并根据目标API的具体要求和敏感性,选择最合适的认证策略。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

1995

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2782

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

956

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3119

2025.09.10

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5844

2023.10.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1578

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2344

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5844

2023.10.24

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn