Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用urllib.URLopener获取JSON时出现问题_Python_Json_Python 2.7_Urllib - Fatal编程技术网

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端点的配置不同。而且,您仍然会不时遇到推出问题。