python - urllib2.urlopen()打开mp3链接时,报错
迷茫
迷茫 2017-04-17 11:36:57
[Python讨论组]

请教各位,准备在VOA的官网上正常mp3文件,在用 urllib2.urlopen()下载mp3类型文件时,报了 URLError。有可能是哪些原因造成的呢?多谢各位。

使用的代码如下:

urllib2.urlopen('http://realaudio.rferl.org/voa/LERE/2013/07/19/6d07939b-45fc-4984-92b5-7f9ccc978ac5.mp3')

已经进行的一些尝试:

  1. 链接是浏览器中是可以正常访问的。
  2. 在chrome中修改user-agent为'aaa',也可以正常下载,应该可以排除网站限制了非浏览器访问。
  3. 下载html类型的链接正常。

感谢@依云的提醒,以下是Traceback:

>>> urllib2.urlopen('http://realaudio.rferl.org/voa/LERE/2013/07/19/6d07939b-45fc-4984-92b5-7f9ccc978ac5.mp3')

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    urllib2.urlopen('http://realaudio.rferl.org/voa/LERE/2013/07/19/6d07939b-45fc-4984-92b5-7f9ccc978ac5.mp3')
  File "C:\Python27\lib\urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 404, in open
    response = self._open(req, data)
  File "C:\Python27\lib\urllib2.py", line 422, in _open
    '_open', req)
  File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 1214, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "C:\Python27\lib\urllib2.py", line 1187, in do_open
    r = h.getresponse(buffering=True)
  File "C:\Python27\lib\httplib.py", line 1045, in getresponse
    response.begin()
  File "C:\Python27\lib\httplib.py", line 409, in begin
    version, status, reason = self._read_status()
  File "C:\Python27\lib\httplib.py", line 365, in _read_status
    line = self.fp.readline(_MAXLINE + 1)
  File "C:\Python27\lib\socket.py", line 476, in readline
    data = self._sock.recv(self._rbufsize)
error: [Errno 10054] 
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
PHP中文网

代码最先是在Windows下运行的。尝试在linux运行时,报错信息中有“Connection been reset by peers”,所以推测是GFW的问题。

到linode机器上验证了下,运行OK。

结论:这个问题是GFW的问题,跟代码没什么关系。

ringa_lee

可以用httplib2包进行连接,一点是能够防止服务器检测,而是可以设置相关的代理。 https://code.google.com/p/httplib2/
可以设置socks,http://socksipy.sourceforge.net/

import httplib2
import socks

httplib2.debuglevel=4
h = httplib2.Http(proxy_info = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, 'localhost', 8000))
r,c = h.request("http://bitworking.org/news/")

详细用法可以参考https://code.google.com/p/httplib2/wiki/Examples

阿神

如果在*nix 我一般直接用 wget 方便...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号