使用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
头,现在我可以获取图像了。谢谢