Python 使用urllib.URLopener获取JSON时出现问题
我在使用Python 使用urllib.URLopener获取JSON时出现问题,python,json,python-2.7,urllib,Python,Json,Python 2.7,Urllib,我在使用urllib.URLopener获取JSON时遇到问题,即使我可以在导航器中看到它 代码: import urllib import json json_obj = urllib.URLopener() json_obj.retrieve(json_adress, self.home + "/.cache/program/file.json") ('http error', 404, 'Not Found', <httplib.HTTPMessage instance at 0x
urllib.URLopener
获取JSON时遇到问题,即使我可以在导航器中看到它
代码:
import urllib
import json
json_obj = urllib.URLopener()
json_obj.retrieve(json_adress, self.home + "/.cache/program/file.json")
('http error', 404, 'Not Found', <httplib.HTTPMessage instance at 0x7fa73d9b3a28>)
错误:
import urllib
import json
json_obj = urllib.URLopener()
json_obj.retrieve(json_adress, self.home + "/.cache/program/file.json")
('http error', 404, 'Not Found', <httplib.HTTPMessage instance at 0x7fa73d9b3a28>)
您尝试访问的URL位于主机上,并非所有服务器都包含您请求的内容:
$ host webservices.francetelevisions.fr
webservices.francetelevisions.fr is an alias for www-es.francetelevisions.fr.
www-es.francetelevisions.fr is an alias for francetv.fr.edgesuite.net.
francetv.fr.edgesuite.net is an alias for a253.w5.akamai.net.
a253.w5.akamai.net has address 23.3.13.170
a253.w5.akamai.net has address 23.3.13.176
查找主机名时给出的计算机确切地址取决于您的地理位置;通过解析DNS别名,DNS服务器使用您的IP地址猜测网络中哪个服务器可能更靠近您
很可能是CDN机器的更新是逐步进行的,或者在第一次DNS查找过期后,您将获得一个不同的IP地址以供以后联系。不管是哪种方式,Python对此都无能为力;除非您知道源服务器(通常是而不是由网站披露以避免过载),否则您必须按照正常的CDN更新流程进行操作。我终于找到了一个解决方案,为Firefox添加了一个标题:
json_obj = urllib.URLopener()
json_obj.addheaders = [("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:44.0) Gecko/20100101 Firefox/44.0")]
json_obj.retrieve(json_adress, self.home + "/.cache/program/file.json")
现在它每次都能工作 我们不知道。这是服务器告诉您找不到它,而不是Python。也许该站点使用CDN,但并非所有机器都已更新?如果没有URL的详细信息,我们在这里无能为力。好的,谢谢。我将添加json地址和编辑问题OK,感谢这些精确性。我将添加一个
try/except
,并在我的程序中添加一条消息“稍后再试!”:)CDN很可能当前是最新的。CDN更新不是连续的。即使用户代理标头有所不同,也表明某些CDN端点的配置不同。而且,您仍然会不时遇到推出问题。