首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >模拟浏览器下载文件?

模拟浏览器下载文件?
EN

Stack Overflow用户
提问于 2013-02-13 10:31:07
回答 6查看 11.6K关注 0票数 16

网络上有一个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代码工作吗?

EN

回答 6

Stack Overflow用户

发布于 2013-02-13 11:02:12

机械化似乎可以进行有状态浏览,这意味着它将保留浏览器请求之间的上下文和cookie。我建议先加载视频所在的完整页面,然后再尝试显式下载视频。这样,web服务器将认为它是一个正在进行的完整(合法)浏览会话

票数 6
EN

Stack Overflow用户

发布于 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://www.charlesproxy.com/

或更多低级http://netcat.sourceforge.net/

http://www.wireshark.org/

一旦你知道了不同之处,想出一个解决方案通常要简单得多。我怀疑关于有状态浏览/cookie的其他答案是正确的。使用上面提到的工具,您可以分析这些cookie并推出合适的解决方案,而无需浏览器自动化。

票数 4
EN

Stack Overflow用户

发布于 2013-02-21 19:38:55

我认为许多网站使用的临时链接只存在于你的会话中。url中的代码可能类似于您的session-id。这意味着这个特定的链接再也不会起作用了。

您必须使用一些容纳此会话的库(如其他答案中提到的)重新打开包含该链接的页面。然后尝试定位该链接并仅在此会话中使用它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14845491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档