我想通过他们的应用程序接口通过Powershell从AppAnnie获取数据。
身份验证描述如下:http://support.appannie.com/entries/23215057-2-Authentication
我的代码看起来像这样:
$apiKey = "someApiKey"
$url = "api.appannie.com/v1.1/apps/ios/app/661947195/ranks?start_date=2014-04-23&end_date=2012-04-23&interval=hourly&countries=US+CN"
$headers = @{"Authorization" = "Bearer " + $apiKey}
$appAnnieResult = Invoke-RestMethod -Uri $url -Headers $headers
$appAnnieResult结果是:
Invoke-RestMethod : Der Remoteserver hat einen Fehler zurückgegeben: (401) Nicht autorisiert.我遗漏了什么?
尝试使用和不使用http://,https://
要试用它,你需要一个来自AppAnnie的APIKey (你需要一个免费的帐户)
谢谢!
桑德罗
更新:使用suggest https前缀和广泛的日志记录,我可以将其作为头信息获取
Transfer-Encoding=chunked
Connection=keep-alive
Keep-Alive=timeout=10
Vary=Accept-Language,Cookie
Content-Language=en
Content-Type=application/json
Date=Thu, 24 Apr 2014 16:03:06 GMT
Set-Cookie=sessionId="someLongSessionId";
Path=/
Server=nginx
sessionId="theSameLongSessionId"=现在的响应类型是
"StatusCode": 400,
"StatusDescription": "BAD REQUEST"我认为“坏请求”会比“未经授权”更糟糕。但看起来授权不再是问题(似乎有一个会话),但我的请求一定有问题,对吧?在给定的示例中,我只更改了appId和日期(检查日期中的日和月的正确位置)
更新2:尝试使用不同的参数,响应作为行尾的注释
$url = "https://api.appannie.com/v1.1/apps/ios/app/848160327/ranks?start_date=2014-04-23&end_date=2012-04-24" #400, bad request
$url = "https://api.appannie.com/v1.1/apps/ios/app/848160327/ranks?countries=US+CN" #403, forbidden
$url = "https://api.appannie.com/v1.1/apps/ios/app/848160327/ranks?interval=hourly" #403, forbidden
$url = "https://api.appannie.com/v1.1/apps/ios/app/848160327/ranks?countries=US+CN&interval=hourly" #403, forbidden
$url = "https://api.appannie.com/v1.1/apps/ios/app/848160327/ranks?start_date=2014-04-23&end_date=2012-04-24&interval=hourly" #400, bad request
$url = "https://api.appannie.com/v1.1/apps/ios/app/848160327/ranks?start_date=2014-04-23&end_date=2012-04-24&countries=US+CN" #400, bad request我认为响应是文档所期望的,因为start_date和end_date是唯一必需的参数。只要他们在,这就是一个坏的请求(400),如果不在,它就变成一个禁止的(403)
发布于 2014-05-21 14:06:38
解决方案
所以所有的尝试在某种程度上都是徒劳的
发布于 2014-04-24 03:56:11
文档中似乎指定"bearer“是小写的。如果你不大写这个词,你会得到同样的错误吗?
此外,看起来您可能需要对头部进行编码,如下所示:
$headers = @{"Authorization"="bearer "+
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($apiKey))}转储响应异常详细信息和头部的代码:
try{
$appAnnieResult = Invoke-RestMethod -Uri $url -Headers $headers
} catch {
write-host (Convertto-Json $_.Exception.Response)
$headers = $_.Exception.Response.Headers
$cookies = $_.Exception.Response.Cookies
$headers |% { write-host "$_=$($headers[$_])"}
$cookies |% { write-host "$_=$($cookies[$_])"}
}并且您肯定希望将https://保留在uri中。
https://stackoverflow.com/questions/23252178
复制相似问题