Azure 移动服务从 FourSquare 收到 403 HTTP 异常

Posted

技术标签:

【中文标题】Azure 移动服务从 FourSquare 收到 403 HTTP 异常【英文标题】:Azure Mobile Service receiving a 403 HTTP exception from FourSquare 【发布时间】:2015-12-28 21:24:12 【问题描述】:

我有一个非常奇怪的问题,我希望有人能把我送到正确的方向。我会尽力提供尽可能多的信息,但如果我错过了任何重要的信息,我将非常乐意提供额外的信息。

我正在尝试从 Azure 移动服务 .Net 后端向 FourSquare API 发出请求,但我得到“远程服务器返回错误:(403)”与我做什么无关!我用来测试的 URL 如下。我正在使用一个非常基本的请求 URL 进行测试,以尽量减少查询字符串参数的任何问题。我还创建了一个临时的 FourSqaure 应用程序,以便我可以为这篇文章提供确切的 URL。

https://api.foursquare.com/v2/venues/categories?client_id=RGRB1T4E2XZN5FMT51VRTSB5VC4AH3HHYJJT5KF5HXFMPK5P&client_secret=0XKMB2ZPUVE1W2MICTNG0ETJPETDNDSNQCVB32WTBBHKNRIC&v=20151021

工作原理是有一个 AngularJS Web 客户端向 Azure 移动服务 API 发出请求。然后移动服务向 FourSquare API 发出请求并将结果返回给 AngularJS 客户端。 所以这就是正在发生的事情: 1.在我的开发机器上从移动服务向 FourSquare 发出请求时,它工作正常 2.当从谷歌浏览器中的另一个 REST 客户端向 FourSquare API 发出请求时,它工作正常 3. 从本地机器上的 .Net 控制台应用程序发出请求时,它工作正常。我添加了下面创建的请求,使用 Fiddler 捕获。 4. 从控制台应用程序(如下所示)获取完全相同的代码并将其添加到 Azure 移动服务时,它会返回 403 错误。错误的详细信息记录在 Azure 门户中,因此我知道客户端已成功连接到移动服务,并且 403 来自 WebRequest。

提琴手请求(本地工作):

GET https://api.foursquare.com/v2/venues/categories?client_id=RGRB1T4E2XZN5FMT51VRTSB5VC4AH3HHYJJT5KF5HXFMPK5P&client_secret=0XKMB2ZPUVE1W2MICTNG0ETJPETDNDSNQCVB32WTBBHKNRIC&v=20151021 HTTP/1.1
Accept: *.*
Content-Type: text/plain; charset=utf-8
Host: api.foursquare.com
Connection: Keep-Alive

控制台应用程序代码(在本地工作,但不在云端)

Dim request As WebRequest - WebRequest.Create("https://api.foursquare.com/v2/venues/categories?client_id=RGRB1T4E2XZN5FMT51VRTSB5VC4AH3HHYJJT5KF5HXFMPK5P&client_secret=0XKMB2ZPUVE1W2MICTNG0ETJPETDNDSNQCVB32WTBBHKNRIC&v=20151021")

request.Credentials = CredentialCache.DefaultCredentials

With Ctype(request,HttpWebRequest)
   .Accept = "*.*"
   .ContentType = "text/plain; charset=utf-8"
   .Method = "GET"
End With
Dim response As WebResponse = request.GetResponse()
WriteLine(CType(response, HttpWebResponse).StatusDescription)
Dim dataStream As Stream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
WriteLine(responseFromServer)
reader.Close()
response.Close()

任何关于如何进一步排除故障甚至我做错了什么的建议都将不胜感激!谢谢!

【问题讨论】:

为了没有其他人像我一样浪费任何时间,我已经给 FourSquare 发送了电子邮件,他们回复说,我引用“不幸的是,由于过去一周 Azure 过度拥塞,我们一直密切关注控制来自 Azure Web 的 API 流量。”。所以我已经要求他们确认一些事情,特别是如果请求实际上被阻止,为什么错误消息没有给出任何指示以及为什么他们没有将其公开。假设我正确理解了该消息,我将在确认后更新帖子。 【参考方案1】:

FourSquare 当前正在阻止来自 Microsoft Azure 服务器的请求。我联系了他们的支持并没有抱太大希望,尤其是在一年中的这个时候。他们非常好,很快就回复了我。我什至在新年那天收到一封电子邮件,说他们已经解决了我的问题。

简而言之,如果您需要从 Azure 向 FourSquare 发出请求,请发送电子邮件并询问他们是否可以将您的 IP 地址列入白名单。我现在唯一的批评是他们真的应该在错误响应中加入一些东西,告诉你他们在做什么,这样你就不会浪费时间去追赶你的尾巴。

【讨论】:

以上是关于Azure 移动服务从 FourSquare 收到 403 HTTP 异常的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Android 谷歌云消息 (GCM) 的 Azure 移动服务从不向设备发送通知

移动设备上的 Azure App Service 身份验证问题

如何从 Azure 移动应用服务调用 HTTP(Azure Functions)?

从 UWP 客户端使用 Azure 移动服务进行身份验证

将文件从 Azure 存储 blob 移动到 Ftp 服务器

失败的消息不会从 Azure 服务总线触发函数移动到 DLQ