从 api 访问 JSON 文件时遇到困难 - 接收到 403 错误(但是从另一个服务器工作)
Having difficulty accessing JSON file from an api - receiving 403 error (works from another server, however)
访问 https://api.weather.gov/products/fead3465-2e6f-4350-ae90-15aaa61b91ff to retrieve a JSON string, I'm receiving a (403): Forbidden error. The same code is successful using another another 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):禁止的错误。
查看 FAQ for this api,我看到他们提到了 UserAgent。如果我指定另一个 UserAgent
,我可以为我得到这个 运行。我会审查他们的 API 许可证,以确保这是一种 valid/legal 访问此 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://api.weather.gov/products/fead3465-2e6f-4350-ae90-15aaa61b91ff to retrieve a JSON string, I'm receiving a (403): Forbidden error. The same code is successful using another another 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):禁止的错误。
查看 FAQ for this api,我看到他们提到了 UserAgent。如果我指定另一个 UserAgent
,我可以为我得到这个 运行。我会审查他们的 API 许可证,以确保这是一种 valid/legal 访问此 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