如何从 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>
<LoginKey>
对象数据是我最终需要将用户浏览器重定向到的 URL。
我是使用 API 的新手,并且尝试了很多在发布之前无法使用的方法。如果您知道如何做到这一点,如果您分享您的知识,我将非常感激。
谢谢。
【问题讨论】:
【参考方案1】:从 html <form>
,使用传统的帖子(不是 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 而不是尝试重定向,然后让 javascript 用 window.location.href = '...'
进行重定向
【讨论】:
谢谢!该按钮不是表单提交按钮,所以我可以在上面的代码之前更改为获取并获取获取数据吗? 当然,如果用户 ID 来自查询字符串,则使用$_GET['userid']
而不是 $_POST['userid']
。
完美运行!再次感谢您的帮助。以上是关于如何从 PHP 中获取远程 JSON 或 XML API 数据并将返回对象分配为 PHP 变量?的主要内容,如果未能解决你的问题,请参考以下文章
PHP、XML 获取记录节点和值并将它们放入 JSON 数组? [复制]
如何循环访问和访问多维和关联数组中的各种元素? PHP,JSON 或 XML