处理Python请求模块中的自动重定向

时间:2015-06-06 17:56:03

标签: python opencv image-processing

我正在使用网站解码一些验证码图像。我通过session.post发送一些图像,但服务器需要2-3秒,然后给出一条302消息,这基本上是一个重定向消息(我在浏览器中看到),但是当我尝试使用Python请求时这样做模块,它给我一条200条消息,这意味着它成功地将消息发送到服务器。

我在这里缺少什么?我应该添加什么以便我返回302响应代码,该代码将具有用于进一步访问页面的URL。附加了示例代码和示例图像。image here

import requests
session = requests.Session()
headers = {'Content-type': 'multipart/form-data', 'X-Requested-With': 'XMLHttpRequest',\
           'Referer':'http://www.to-text.net/',\
           'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36'}

data = {'action':"convert", 'ocr_lang':'eng',  'filename':"img_0.jpg"}

r1 = session.post('http://www.to-text.net/', files = data, headers = headers, allow_redirects=True)

print r1

我知道请求可以处理自动重定向,但是当我尝试在

中访问它时
print r1.history

它给了我一个空列表。

这是我在网站上使用该表单时在Chrome控制台中看到的内容:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

您应该设置Content-type标头;将其留给requests模块,因为它需要在该标题中传达多部分边界。

您实际上并没有发送任何文件数据。想必要发送图像文件:

import requests
session = requests.Session()
headers = {
   'Referer':'http://www.to-text.net/',
   'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36'
}

with open('img_0.jpg', 'rb') as imgfile:
    data = {
        'action': "convert",
        'ocr_lang': 'eng',
        'doc_file': ('img_0.jpg', imgfile, 'image/jpeg'),
    }

    r1 = session.post('http://www.to-text.net/', files=data, headers=headers)

请参阅快速入门文档的POST a Multipart-Encoded File section

您可能还必须发送初始GET请求以获取Cookie集,并且服务器可能仍会对您尚未提供的请求标头进行其他检查。您将不得不尝试使用这些标头,服务器可以根据您发送的确切标头和请求主体随意响应任何方式。