【发布时间】:2016-03-29 15:15:08
【问题描述】:
我无法通过以下代码使用 Yahoo 天气服务 API 进行身份验证。 我究竟做错了什么?我收到 401 - 未经授权。通过 xml.weather.yahoo.com 尝试过 - 同样的事情。我已经为此烦恼了一段时间,因此我们将不胜感激。
代码:
Public Function getData() As String
Dim resp As String = ""
Try
Dim consumerKey As String = "MY PRIVATE API KEY STRING GOES HERE"
Dim consumerSecret As String = "SECRET WAS PLACED HERE"
Dim uri = New Uri("https://query.yahooapis.com/v1/yql?q=SELECT%20*%20FROM%20weather.bylocation%20WHERE%20location%3D%27Kefar-Weradim%27%20AND%20unit%3D%22c%22&format=xml&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys")
Dim url As String, param As String
Dim oAuth = New OAuthBase()
Dim nonce = oAuth.GenerateNonce()
Dim timeStamp = oAuth.GenerateTimeStamp()
Dim signature = oAuth.GenerateSignature(uri, consumerKey, consumerSecret, String.Empty, String.Empty, "GET", timeStamp, nonce, OAuthBase.SignatureTypes.HMACSHA1, url, param)
Using _webResponse As WebResponse = WebRequest.Create(String.Format("{0}?{1}&oauth_signature={2}", url, param, signature)).GetResponse()
Using reader As StreamReader = New StreamReader(_webResponse.GetResponseStream())
resp = reader.ReadToEnd()
End Using
End Using
Catch ex As Exception
resp = "Error: " & ex.Message
End Try
Return resp
End Function
【问题讨论】:
-
我看到来自 yahoo api 网站的奇怪行为。使用类似的代码,我的代码返回 401 - 在约 80% 的情况下未经授权。在大约 10% 的情况下,它会为我提供数据。 (其余 10% 用于其他随机故障)