从实时 API 获取 JSON 响应Microsoft而不是重定向用户的个人资料图片



我针对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。两者都没有任何效果。

这并不是我问题的真正答案,所以我仍然对原始问题的任何回答感兴趣。然而,我找到了一种变通方法。

URL https://apis.live.net/v5.0/{user_id}/picture将在不需要访问令牌的情况下返回适当的照片。因此,您所需要的只是用户的id来构建这个URL,并且可以通过:获得

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所需要的。这并不理想,因为我必须做两个步骤,希望微软不会改变检索特定用户的个人资料图片的方式,或者突然开始需要访问令牌。不过,我想总比什么都没有好。

添加?suppress_redirects=true应该这样做。

即。得到https://apis.live.net/v5.0/me/picture?access_token=ACCESS_TOKEN&suppress_redirects=真实

实际上,我还没有用/me/picture测试过这一点,但{user_id}/picture也有同样的行为,添加suppress_redirects=true就成功了。

相关内容

最新更新