python-3.x - 如何使用 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?
解决方案
上传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())
推荐阅读
- ios - 关闭 iOS 后滑
- python - 使用 tensorflow1.8.0 时,“BasicLSTMCell”对象没有属性“_kernel”
- javascript - 为什么instanceof在Javascript中为子对象返回false
- html - 使用骨架网格时如何将导航栏正确移动到徽标的右侧
- apache-spark - 由于 java.io.FileNotFoundException,Google 的 Dataproc 上的 Spark 失败:/hadoop/yarn/nm-local-dir/usercache/root/appcache/
- tmux - Tmux:不允许切换到特定窗格
- c++ - 如何快速将数字添加到向量中的一系列元素
- django - 在 Heroku 中编辑本地安装的包后,它会重置
- angular - PrimeNG:在 p-table 中,水平条位于未冻结视图中的正文和页脚之间
- express - 如何从 url 查询字符串构造 mongoose Find?