网络上有一个FLV文件,可以直接在Chrome中下载。该文件是一个电视节目,由中国中央电视台( CCTV )发布。CCTV是一家由中国纳税人资助的非营利性国有广播公司,它允许我们在不侵犯版权的情况下下载他们的内容。
使用wget
,我可以从不同的地址下载文件,但不能从Chrome中工作的地址下载。
这就是我想要做的:
url='http://114.80.235.200/f4v/94/163005294.h264_1.f4v?10000&key=7b9b1155dc632cbab92027511adcb300401443020d&playtype=1&tk=163659644989925531390490125&brt=2&bc=0&nt=0&du=1496650&ispid=23&rc=200&inf=1&si=11000&npc=1606&pp=0&ul=2&mt=-1&sid=10000&au=0&pc=0&cip=222.73.44.31&hf=0&id=tudou&itemid=135558267&fi=163005294&sz=59138302'
wget -c $url --user-agent="" -O xfgs.f4v
这也不起作用:
wget -c $url -O xfgs.f4v
输出为:
Connecting to 118.26.57.12:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2013-02-13 09:50:42 ERROR 403: Forbidden.
我做错了什么?
我最终想用Python库mechanize
下载它。下面是我使用的代码:
import mechanize
br = mechanize.Browser()
br = mechanize.Browser()
br.set_handle_robots(False)
br.set_handle_equiv(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
url='http://114.80.235.200/f4v/94/163005294.h264_1.f4v?10000&key=7b9b1155dc632cbab92027511adcb300401443020d&playtype=1&tk=163659644989925531390490125&brt=2&bc=0&nt=0&du=1496650&ispid=23&rc=200&inf=1&si=11000&npc=1606&pp=0&ul=2&mt=-1&sid=10000&au=0&pc=0&cip=222.73.44.31&hf=0&id=tudou&itemid=135558267&fi=163005294&sz=59138302'
r = br.open(url).read()
tofile=open("/tmp/xfgs.f4v","w")
tofile.write(r)
tofile.close()
这就是结果:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 203, in open
return self._mech_open(url, data, timeout=timeout)
File "/usr/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 255, in _mech_open
raise response
mechanize._response.httperror_seek_wrapper: HTTP Error 403: Forbidden
有人能解释一下如何让mechanize
代码工作吗?
发布于 2013-02-13 11:02:12
机械化似乎可以进行有状态浏览,这意味着它将保留浏览器请求之间的上下文和cookie。我建议先加载视频所在的完整页面,然后再尝试显式下载视频。这样,web服务器将认为它是一个正在进行的完整(合法)浏览会话
发布于 2013-02-19 14:29:35
为了阐明问题的“为什么”部分,您可以通过调试代理来路由浏览器和代码的请求。如果你使用的是windows,我建议你使用fiddler2。也存在用于其他平台的其他调试代理。但fiddler2绝对是我的最爱。
http://www.fiddler2.com/fiddler2/
https://www.owasp.org/index.php/Category:OWASP_WebScarab_Project
或更多低级http://netcat.sourceforge.net/
一旦你知道了不同之处,想出一个解决方案通常要简单得多。我怀疑关于有状态浏览/cookie的其他答案是正确的。使用上面提到的工具,您可以分析这些cookie并推出合适的解决方案,而无需浏览器自动化。
发布于 2013-02-21 19:38:55
我认为许多网站使用的临时链接只存在于你的会话中。url中的代码可能类似于您的session-id。这意味着这个特定的链接再也不会起作用了。
您必须使用一些容纳此会话的库(如其他答案中提到的)重新打开包含该链接的页面。然后尝试定位该链接并仅在此会话中使用它。
https://stackoverflow.com/questions/14845491
复制相似问题