Python 使用请求库上载图片时出错
我正试图在我的代码中实现。在Burp Suite的帮助下,我成功地发现以下请求是用于发送图像的请求: 我试图用以下代码模拟此请求:Python 使用请求库上载图片时出错,python,python-3.x,python-requests,Python,Python 3.x,Python Requests,我正试图在我的代码中实现。在Burp Suite的帮助下,我成功地发现以下请求是用于发送图像的请求: 我试图用以下代码模拟此请求: import requests from requests_toolbelt import MultipartEncoder files={ 'file':("blob",open("image_path", 'rb'),"image/jpeg") } #(<filename>, <file object>, <co
import requests
from requests_toolbelt import MultipartEncoder
files={
'file':("blob",open("image_path", 'rb'),"image/jpeg")
}
#(<filename>, <file object>, <content type>, <per-part headers>)
burp0_url = "https://translate.yandex.net:443/ocr/v1.1/recognize?srv=tr-image&sid=9b58493f.5c781bd4.7215c0a0&lang=en%2Cru"
m = MultipartEncoder(files, boundary='-----------------------------7652580604126525371226493196')
burp0_headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0", "Accept": "*/*", "Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate", "Referer": "https://translate.yandex.com/", "Content-Type": "multipart/form-data; boundary=-----------------------------7652580604126525371226493196", "Origin": "https://translate.yandex.com", "DNT": "1", "Connection": "close"}
print(requests.post(burp0_url, headers=burp0_headers, files=m.to_string()).text)
有人知道如何解决这个问题吗
非常感谢 您正在将
MultipartEncoder.to_string()
结果传递给文件
参数。您现在请求将多部分编码器的结果编码到多部分组件。那太多了一次
您不需要在此处复制每个字节,只需发布文件,还可以设置用户代理、引用者和来源:
files = {
'file': ("blob", open("image_path", 'rb'), "image/jpeg")
}
url = "https://translate.yandex.net:443/ocr/v1.1/recognize?srv=tr-image&sid=9b58493f.5c781bd4.7215c0a0&lang=en%2Cru"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0",
"Referer": "https://translate.yandex.com/",
"Origin": "https://translate.yandex.com",
}
response = requests.post(url, headers=headers, files=files)
print(response.status)
print(response.json())
连接头最好留给请求使用,它可以控制连接何时保持活动状态。Accept*头告诉服务器客户端可以处理什么,并且请求也会自动设置这些请求
我得到一个200 OK的回复,代码是:
200
{'data': {'blocks': []}, 'status': 'success'}
但是,如果不设置其他头(删除headers=headers
参数),请求也会起作用,因此Yandex似乎不会在此处筛选机器人。您正在将MultipartEncoder.to_string()
结果传递给files
参数。您现在请求将多部分编码器的结果编码到多部分组件。那太多了一次
您不需要在此处复制每个字节,只需发布文件,还可以设置用户代理、引用者和来源:
files = {
'file': ("blob", open("image_path", 'rb'), "image/jpeg")
}
url = "https://translate.yandex.net:443/ocr/v1.1/recognize?srv=tr-image&sid=9b58493f.5c781bd4.7215c0a0&lang=en%2Cru"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0",
"Referer": "https://translate.yandex.com/",
"Origin": "https://translate.yandex.com",
}
response = requests.post(url, headers=headers, files=files)
print(response.status)
print(response.json())
连接头最好留给请求使用,它可以控制连接何时保持活动状态。Accept*头告诉服务器客户端可以处理什么,并且请求也会自动设置这些请求
我得到一个200 OK的回复,代码是:
200
{'data': {'blocks': []}, 'status': 'success'}
但是,如果不设置其他头(删除headers=headers
参数),请求也会起作用,因此Yandex似乎不会在此处筛选机器人。我甚至不会在此处为多部分上载复制边界。我当然也不会复制每一个标题。@MartijnPieters非常感谢您的快速回复。那么你将如何复制它呢?我甚至不会在这里复制多部分上传的边界。我当然也不会复制每一个标题。@MartijnPieters非常感谢您的快速回复。那么你将如何复制它呢?