对Cointdesk的Python API调用返回403或405。如何排除故障?
我试图从Cointdesk的API中提取json数据,我尝试了两种方法(直接的urllib.request,然后是我传递UA数据的方法)。 两者都阻止了我(每个代码下面都有错误,命令行输出) 有没有办法让代码更健壮?更能抵抗阻塞?据我所知,没有文档,也没有repo,我可以查看它们的API是如何符合的。但是,我知道我正在直接访问Cointdesk希望人们使用的API,所以我觉得这有点奇怪(与您正在抓取web数据的情况相反) 谢谢你的帮助 此代码抛出了一个403,并带着错误退出: urllib.error.HTTPError:HTTP错误403:禁止对Cointdesk的Python API调用返回403或405。如何排除故障?,python,nginx,urllib,Python,Nginx,Urllib,我试图从Cointdesk的API中提取json数据,我尝试了两种方法(直接的urllib.request,然后是我传递UA数据的方法)。 两者都阻止了我(每个代码下面都有错误,命令行输出) 有没有办法让代码更健壮?更能抵抗阻塞?据我所知,没有文档,也没有repo,我可以查看它们的API是如何符合的。但是,我知道我正在直接访问Cointdesk希望人们使用的API,所以我觉得这有点奇怪(与您正在抓取web数据的情况相反) 谢谢你的帮助 此代码抛出了一个403,并带着错误退出: urllib.er
import urllib.request
import json
req = 'https://api.coindesk.com/v1/bpi/currentprice.json'
readdata = urllib.request.urlopen(req)
json_data = readdata.read()
print json_data
此代码引发405错误,错误为:
urllib.error.HTTPError:HTTP错误405:nginx/1.12.1
import json
import urllib.request
exchange_url = 'https://api.coindesk.com/v1/bpi/currentprice.json'
user_agent= 'Mozilla/5.0 (Windows NT 6.1; Win64; X64)'
values = {'name' : 'Mischa Kolding',
'location' : 'Los Angeles',
'language' : 'Python' }
headers = {'User-Agent' : user_agent }
data = urllib.parse.urlencode(values)
data = data.encode('ascii')
req = urllib.request.Request(exchange_url, data, headers)
with urllib.request.urlopen(req) as response:
the_json = response.read()
print(the_json)
我应该指出,直接导航到json链接会在浏览器中显示json
以下是Cointdesk的API页面:
编辑:
多亏了t.m.adam,我解决了这个问题。除了添加标题,我什么都做了,这才是真正需要的。谢谢你帮我解决noob问题:
#This is the API for BTC price request.
import json
import urllib.request
url = 'https://api.coindesk.com/v1/bpi/currentprice.json'
hdr = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)' }
req = urllib.request.Request(url, headers=hdr)
readdata = urllib.request.urlopen(req)
json_data = readdata.read()
print(json_data)
如上图所示,这段代码有效。标题细节缺失(就像我脸上的鼻子一样清晰)
他们的api似乎只支持GET请求。你是从python文档中获得这些
值的吗?我从python文档中剪下了表单,并添加了符合示例的假值。我在链接的api文档中找不到任何接受post参数的示例。但是如果包含用户代理,你的第一个代码片段就可以正常工作在标题中。谢谢你的提示!我知道了。我将更新代码:)
#This is the API for BTC price request.
import json
import urllib.request
url = 'https://api.coindesk.com/v1/bpi/currentprice.json'
hdr = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)' }
req = urllib.request.Request(url, headers=hdr)
readdata = urllib.request.urlopen(req)
json_data = readdata.read()
print(json_data)