下载文件headlessly

问题描述:

我运行,需要从下载网址的文件运行PHP查询的Python脚本:下载文件headlessly

url = "https://blah.com//file.php?file=FileName&params=query=SomeQuery" 

在实际的浏览器,因为你登录的站点,去该URL启动文件(.csv)的下载。

如何通过我的脚本使用requests下载此文件?例如:

import requests 

s = requests.Session() # we log in using this session elsewhere so authentication shouldn't be a problem 
response = s.get(url) 

with open("my_file.csv", "w") as f: 
    write(response.data, f) # pseudo code 

我似乎无法启动下载。我需要看看我需要传递什么标题吗?

+0

你可以在命令行上运行python脚本 - 并按预期下载文件吗? –

+0

我已经这样做了,并且它不工作。我需要让'requests'模块正确地GET文件。我期待一个'JSON'格式或其他的东西... – Petar

+0

在猜测该网站正在走出它的方式来防止你正在尝试的行为(可能利用JavaScript的东西)...不知道你是哪个网站不太可能得到任何进一步的帮助(即使我们知道你试图从这个行为下载的确切网站通常是不被接受的,所以可能不会得到答案) –

这(你的代码的细微变化)似乎工作正常。

import requests 
url = "https://www.stackoverflow.com" 
s = requests.Session() 
response = s.get(url) 

with open("my_file.csv", "w") as f: 
    f.write(response.content) 
    f.close() 
+0

这与我的情况不同,因为我的URL包含PHP查询。 – Petar

+0

它应该没有什么区别。但是,可能发生的情况是响应因用户代理而异 - 例如返回302重定向。当你运行(从命令行)时,你会得到什么?wget -S [你的站点和php url]你看到一个重定向吗? –

+0

'response.content'工作,谢谢。 – Petar