使用Python请求的不同响应
我正在尝试使用使用Python请求的不同响应,python,http,python-requests,Python,Http,Python Requests,我正在尝试使用请求从URL下载图像。使用浏览器或REST客户机,比如我可以检索普通内容、json和二进制图像,并将其保存到磁盘 使用请求作为响应结果,我得到了几乎相同的响应头,只有内容长度具有不同的值-15字节而不是35 KB-并且我找不到二进制图像 尝试模拟浏览器发出的请求时,我配置了相同的请求头,如下所示: headers = {"Host": "cpom.prefeitura.sp.gov.br", "Pragma": "no-cache", "
请求
从URL下载图像。使用浏览器或REST客户机,比如我可以检索普通内容、json和二进制图像,并将其保存到磁盘
使用请求
作为响应结果,我得到了几乎相同的响应头,只有内容长度
具有不同的值-15字节而不是35 KB-并且我找不到二进制图像
尝试模拟浏览器发出的请求时,我配置了相同的请求头,如下所示:
headers = {"Host": "cpom.prefeitura.sp.gov.br",
"Pragma": "no-cache",
"Cache-Control": "no-cache",
"DNT": "1",
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.9,pt;q=0.8",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/65.0.3325.181 Safari/537.36"
}
r = requests.get(url, stream=True, headers=headers)
没有重定向,我也调试并查看requests.model.Response
的内容,但没有成功
我错过了什么?我想这是关于这个请求的一个细节,但我无法理解
这是我的测试:
url = "https://cpom.prefeitura.sp.gov.br/prestador/SituacaoCadastral/ImagemCaptcha?u=8762520"
r = requests.get(url, stream=True)
if r.status_code == 200:
print(r.raw.headers)
with open("/home/bruno/captcha/8762520.txt", "wb") as f: # saving as text, since is not the png image
for chunk in r:
f.write(chunk)
这是下载图像的URL:
这是带有验证码图像的站点:
使用一个简单的GET
将只获得一个json响应体,但是检查响应时,您将看到二进制响应,即大约36kb大小的图像
编辑:包括来自restlet客户端的图像
请求:
答复:
区别在于
Cookie
标题。Restlet默认使用现有Chrome的cookies(),但是如果您将Cookie
头设置为空字符串,您将看到无法获得图像。如果您希望能够从Python脚本检索图像,您需要首先获取一个有效的cookie,请求web应用程序中的另一个有效URL(例如与您发布的表单的链接),然后查看设置cookie
(请参阅以获取更多信息)。我只能使用小JSON获得15字节的响应,要么用铬,要么用邮递员。您从何处/如何获得图像的响应?@jdehesa我使用restlet包含了一个示例请求。ThanksHum,我明白了,restlet设置了一个Cookie
。我将测试这种方法。就是说,我正在发出另一个请求,获取setcookie
头,现在我可以获取图像了。谢谢