我正在针对Microsoft Live API发出以下请求:
GET https://apis.live.net/v5.0/me/picture?access_token=ACCESS_TOKEN
与该API的任何其他请求不同,结果是重定向到物理图像位置,这会导致返回实际的图像对象,而不是包含该图像路径的典型JSON响应。
我可以深入了解响应对象并尝试获取Content-Location
标题或其他内容以获取我正在寻找的网址,但这种感觉非常脆弱并且与我的方式不同。 m处理所有其他API响应。
我也知道基于此行为的API网址本身可以充当图片网址,但是1)我使用的是在幕后构建该网址的客户端,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
。没有任何影响。
答案 0 :(得分:1)
这不是我的问题的真正答案,所以我仍然对我原始问题的任何回答感兴趣。但是,我找到了各种解决方法。
网址https://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。这并不理想,因为我必须做两个步骤,并希望微软不会改变特定用户的个人资料图片的检索方式,或者突然开始需要一个访问令牌。不过,我想,它总比没有好。
答案 1 :(得分:1)
添加?suppress_redirects = true应该这样做。
即。 获取https://apis.live.net/v5.0/me/picture?access_token=ACCESS_TOKEN&suppress_redirects=true
我实际上还没有使用/ me / picture对此进行测试,但{user_id} / picture具有相同的行为,添加suppress_redirects = true就可以了。