首页 > 解决方案 > 如何使用 urllib Python3 库转换以下代码?

问题描述

当我使用 python 的 requests 库时,下面的代码对我来说绝对没问题。我希望在 Python3 库中使用 urllib 来完成相同的操作。

import requests

files = {'FileData': open(sample.png, 'rb')}
headers={
    "Authorization": "Basic ***********"
}
result = requests.post("https://my_sample_api_url",headers=headers,files=files)

我尝试像这样在 urllib 中进行此帖子调用,这给了我 400 错误请求错误。

import urllib
from urllib.request import Request, urlopen

files = {'FileData': open("sample.png", "rb")}
headers={
    "Authorization": "Basic ************"
}

data_bytes = urllib.parse.urlencode(files).encode("utf-8")
result_req = Request("https://my_sample_api_url", data=data_bytes, headers=headers)
result = urlopen(image_result_req)

如何将此代码转换为 urllib?

标签: python-3.xapiurllib

解决方案


上传multipart/form-data可以urllib海报库一起使用的文件。

from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import urllib

# Register the streaming http handlers with urllib
register_openers()

# Start the multipart/form-data encoding of the file "sample.png"

# headers contains the necessary Content-Type and Content-Length
# datagen is a generator object that yields the encoded parameters
datagen, headers = multipart_encode({"image": open("sample.png")})

request = urllib.request.Request("https://my_sample_api_url", datagen, headers)

request.add_header("Authorization", "Basic ***********")

print(urllib.request.urlopen(request).read())

推荐阅读