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

Azure Mobile Service receiving a 403 HTTP exception from FourSquare

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

我正在尝试从 Azure 移动服务 .Net 后端向 FourSquare API 发出请求,但得到 "The remote server returned an error: (403)" 不管我做什么都无所谓!下面是我用来测试的 URL。我正在使用一个非常基本的请求 URL 进行测试,以尽量减少查询字符串参数的任何问题。我还创建了一个临时的 FourSqaure 应用程序,以便我可以为此 post 提供准确的 URL。

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

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

Fiddler 请求(在本地工作):

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

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