当访问https://api.weather.gov/products/fead3465-2e6f-4350-ae90-15aaa61b91ff以检索JSON字符串时,我收到一个(403):禁止的错误。使用另一个URL (http://mesonet.agron.iastate.edu/json/nwstext_search.py?sts=2019-04-15T00:00Z&ets=2019-04-18T00:00Z&awipsid=PNSBOX)可以成功地使用相同的代码,但是,该URL没有api.weather.gov那么健壮。
我不确定是否需要模拟浏览器凭据才能从api访问此JSON。我正在使用Windows Powershell 2.0编写代码(不幸的是,无法升级)。
$url = "https://api.weather.gov/products/fead3465-2e6f-4350-ae90-15aaa61b91ff"
$WebRequest = [System.Net.WebRequest]::Create($url)
$WebRequest.Method = "GET"
$WebRequest.ContentType = "application/json"
$WebRequest.UseDefaultCredentials = $true
$Response = $WebRequest.GetResponse()
$ResponseStream = $Response.GetResponseStream()
$ReadStream = New-Object System.IO.StreamReader $ResponseStream
$data = $ReadStream.ReadToEnd()
[System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
$ser = New-Object System.Web.Script.Serialization.JavaScriptSerializer
$json = $ser.DeserializeObject($data)
echo $json
期望看到JSON,但得到一个(403):禁止的错误。
发布于 2019-04-17 02:43:16
看着FAQ for this api,我看到他们提到了UserAgent。如果我指定了另一个UserAgent
,我可以让它为我运行。我会审查他们对API的许可,以确保这是访问此API的有效/合法方式,以确保您不会违反他们的使用条款进行访问。
$url = "https://api.weather.gov/products/fead3465-2e6f-4350-ae90-15aaa61b91ff"
$WebRequest = [System.Net.WebRequest]::Create($url)
$WebRequest.Method = "GET"
$WebRequest.ContentType = "application/json"
$WebRequest.UserAgent = 'Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) AppleWebKit/534.6 (KHTML, like Gecko) Chrome/7.0.500.0 Safari/534.6'
$Response = $WebRequest.GetResponse()
$ResponseStream = $Response.GetResponseStream()
$ReadStream = New-Object System.IO.StreamReader $ResponseStream
$data = $ReadStream.ReadToEnd()
[System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
$ser = New-Object System.Web.Script.Serialization.JavaScriptSerializer
$json = $ser.DeserializeObject($data)
echo $json
https://stackoverflow.com/questions/55712664
复制相似问题