1

我正在针对 Microsoft Live API 提出以下请求:

GET https://apis.live.net/v5.0/me/picture?access_token=ACCESS_TOKEN

与对该 API 的任何其他请求不同,结果是重定向到物理图像位置,这会导致返回实际图像对象,而不是包含该图像路径的典型 JSON 响应。

我可以深入研究响应对象并尝试获取Content-Location标题或其他内容以获取我正在寻找的 URL,但这感觉非常脆弱,并且与我处理所有其他 API 响应的方式不同。

我也知道基于这种行为的 API URL 本身可以充当图像 URL,但是 1)我正在使用在幕后构造该 URL 的客户端,以及 2)我不想保留访问令牌在个人资料图片列中。

Interactive Live SDK实际上显示一个 JSON 对象作为 REST 请求的返回:

{
    "location": "https://cid-0000000000000000.users.storage.live.com/users/0x0000000000000000/myprofile/expressionprofile/profilephoto:UserTileStatic"
}

这就是我想要的那种响应,而且由于交互式 SDK 可以显示它,所以必须有某种方法来请求返回 JSON。我尝试redirect=false在查询字符串中设置(对于 Facebook 来说是必需的,它执行类似的操作)并将Accept请求标头设置为application/json. 两者都没有任何效果。

4

2 回答 2

1

这并不是对我的问题的真正答案,所以我仍然会对我最初问题的任何回答感兴趣。但是,我找到了一种解决方法。

该 URLhttps://apis.live.net/v5.0/{user_id}/picture将返回相应的照片照片,而无需访问令牌。因此,您只需要构建此 URL 的用户 id,可以通过以下方式获得:

GET apis.live.net/v5.0/me?access_token=ACCESS_TOKEN

这将返回类似于:

{
    "id": "0000000000000000",
    "name": "John Doe",
    "first_name": "John",
    "last_name": "Doe",
    "gender": null,
    "locale": "en_US"
}

那里的id成员是您需要的 URL。这并不理想,因为我必须执行两个步骤,并希望 Microsoft 不会改变检索特定用户的个人资料图片的方式,或者也不会突然开始为此需要访问令牌。不过,我想这总比没有好。

于 2015-02-09T16:06:48.113 回答
1

添加 ?suppress_redirects=true 应该可以。

即GET https://apis.live.net/v5.0/me/picture?access_token=ACCESS_TOKEN&suppress_redirects=true

我实际上没有用 /me/picture 测试过这个,但是 {user_id}/picture 具有相同的行为,并且添加 suppress_redirects=true 就可以了。

于 2015-06-09T21:35:33.530 回答