如何从 PHP 中获取远程 JSON 或 XML API 数据并将返回对象分配为 PHP 变量?

Posted

技术标签:

【中文标题】如何从 PHP 中获取远程 JSON 或 XML API 数据并将返回对象分配为 PHP 变量?【英文标题】:How to GET remote JSON or XML API data from within PHP and assign a return object as PHP variable? 【发布时间】:2012-05-16 15:09:32 【问题描述】:

我在做什么:

我正在用 php 编写一个自定义程序,它通过 API 从在线 LMS 服务中提取数据。现在,我正在尝试实现可用的单点登录功能。

这部分程序需要在单击按钮时(通过 js 或 php POST 或?)执行对 API 的 GET 请求,并最终将用户浏览器重定向到 API 响应中提供的 URL。

API 允许选择 XML 或 JSON 响应,我更喜欢使用 JSON,但如果需要也会使用 XML。

来自关于发出请求的 API 文档:

本文档中列出的所有请求都应包含内容类型 (XML 或 JSON)在请求标头中,并带有以下前缀 基础URI:https://api.example.com/v1.svc

例如以 XML 格式获取用户列表的 Uri 将是:

内容类型:文本/xml

获取https://api.example.com/v1.svc/users?apikey=MY-KEY&source=MY-APP

以下是我想要实现的:

如何获取用户的登录密钥

一旦您拥有要登录的用户 ID,您需要创建一个 对 /users/user-id 的 GET 请求将返回有关信息 用户。其中包含一个 LoginKey,您可以使用它来重定向 用户的浏览器来。

例如。

获取 https://api.example.com/v1.svc/users/USER-ID?apikey=YOUR_API_KEY&source=sampleapp

来自 API 的响应:

<User>
  <Id>abc12345678</Id>
  <UserName>rich_demo@example.com</UserName>
  <FirstName>Rich</FirstName>
  <LastName>Chetwynd</LastName>
  .....
  <LoginKey>https://demo.example.com/login.aspx?loginkey=xxxzzzyyy777222</LoginKey>
</User>

&lt;LoginKey&gt; 对象数据是我最终需要将用户浏览器重定向到的 URL。

我是使用 API 的新手,并且尝试了很多在发布之前无法使用的方法。如果您知道如何做到这一点,如果您分享您的知识,我将非常感激。

谢谢。

【问题讨论】:

【参考方案1】:

html &lt;form&gt;,使用传统的帖子(不是 AJAX)到执行此操作的 PHP 脚本:

if(isset($_POST['userid']))

    $userId = (int)$_POST['userid'];

    $obj = simplexml_load_file('https://api.xxx.com/v1.svc/users/' . $userId . '?apikey=YOUR_API_KEY&source=sampleapp');

    if($obj && isset($obj->LoginKey))
    
        $loginKey = $obj->LoginKey;

        header('Location: ' . $loginKey);
    
    else
    
        // failed to load the xml
    


如果您想使用 JSON 来实现,可以使用 file_get_contents() 从 URL 获取原始 JSON,然后使用 json_decode() 将其转换为对象。

另外,如果你想通过 AJAX 来做,你必须用 PHP 回显 URL 而不是尝试重定向,然后让 javascriptwindow.location.href = '...' 进行重定向

【讨论】:

谢谢!该按钮不是表单提交按钮,所以我可以在上面的代码之前更改为获取并获取获取数据吗? 当然,如果用户 ID 来自查询字符串,则使用 $_GET['userid'] 而不是 $_POST['userid'] 完美运行!再次感谢您的帮助。

以上是关于如何从 PHP 中获取远程 JSON 或 XML API 数据并将返回对象分配为 PHP 变量?的主要内容,如果未能解决你的问题,请参考以下文章

PHP:JSON 或 XML 解析器更快吗?

PHP、XML 获取记录节点和值并将它们放入 JSON 数组? [复制]

如何循环访问和访问多维和关联数组中的各种元素? PHP,JSON 或 XML

如何在可缩放滚动视图中绘制可点击的网格对象,从远程 json 数据中获取数据?

PHP JSON 或数组到 XML

从远程服务器解析 JSON 数据