执行文件上传 post 请求
Performing file upload post request
我正在尝试使用 python 将文件上传到服务器。
服务器的 API 必须接受文件以及一些其他参数。
这就是为什么我打开文件,然后创建一个字典,其中包含文件和网络应用程序接受的其他参数,然后对其进行编码并对项目执行 POST 请求。
这是代码:
from urllib import request
from urllib.parse import urlencode
import json
with open('README.md', 'rb') as f:
upload_credentials = {
"file": f,
"descr": "testing",
"title": "READMEE.md",
"contentType": "text",
"editor": username,
}
url_for_upload = "" #here you place the upload URL
req = request.Request(url_for_upload, method="POST")
form_data = urlencode(upload_credentials)
form_data = form_data.encode()
response = request.urlopen(req, data=form_data)
http_status_code = response.getcode()
content = response.read()
print(http_status_code)
print(content)
但是,我在这一行中收到错误:response = request.urlopen(req, data=form_data)
服务器响应 500
HTTP 状态代码。
这是我收到的错误消息:
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 500:
500 个错误代码可能意味着很多事情,我不知道如何进一步推进,因为我所做的一切似乎都在书中...
根据此处提供的信息,是否有人有经验指导我找到一些可能的解决方案?
编辑:我正在尝试复制做同样事情的工作 js 代码。就是这样:
<input type="file" />
<button onclick="upload()">Upload data</button>
<script>
upload = async() =>
{
const fileField = document.querySelector('input[type="file"]');
await uploadDoc(fileField.files[0] );
};
uploadDoc = async( file ) =>
{
let fd = new FormData();
fd.append( 'file', file );
fd.append( 'descr', 'demo_upload' );
fd.append( 'title', name );
fd.append( 'contentType', 'text' );
fd.append( 'editor', user );
let resp = await fetch( url, { method: 'POST', mode: 'cors', body: fd });
};
</script>
js 代码正在执行 multipart/form-data post 请求。
我不相信 urllib 支持 multipart/form-data,你可以使用请求代替。
import requests
with open('README.md', 'rb') as f:
files = {"file": f}
upload_credentials = {
"descr": "testing",
"title": "READMEE.md",
"contentType": "text",
"editor": username,
}
r = requests.post("http://httpbin.org/post", files=files, data=upload_credentials)
print(r.status_code)
print(r.text)
我正在尝试使用 python 将文件上传到服务器。 服务器的 API 必须接受文件以及一些其他参数。
这就是为什么我打开文件,然后创建一个字典,其中包含文件和网络应用程序接受的其他参数,然后对其进行编码并对项目执行 POST 请求。
这是代码:
from urllib import request
from urllib.parse import urlencode
import json
with open('README.md', 'rb') as f:
upload_credentials = {
"file": f,
"descr": "testing",
"title": "READMEE.md",
"contentType": "text",
"editor": username,
}
url_for_upload = "" #here you place the upload URL
req = request.Request(url_for_upload, method="POST")
form_data = urlencode(upload_credentials)
form_data = form_data.encode()
response = request.urlopen(req, data=form_data)
http_status_code = response.getcode()
content = response.read()
print(http_status_code)
print(content)
但是,我在这一行中收到错误:response = request.urlopen(req, data=form_data)
服务器响应 500
HTTP 状态代码。
这是我收到的错误消息:
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 500:
500 个错误代码可能意味着很多事情,我不知道如何进一步推进,因为我所做的一切似乎都在书中...
根据此处提供的信息,是否有人有经验指导我找到一些可能的解决方案?
编辑:我正在尝试复制做同样事情的工作 js 代码。就是这样:
<input type="file" />
<button onclick="upload()">Upload data</button>
<script>
upload = async() =>
{
const fileField = document.querySelector('input[type="file"]');
await uploadDoc(fileField.files[0] );
};
uploadDoc = async( file ) =>
{
let fd = new FormData();
fd.append( 'file', file );
fd.append( 'descr', 'demo_upload' );
fd.append( 'title', name );
fd.append( 'contentType', 'text' );
fd.append( 'editor', user );
let resp = await fetch( url, { method: 'POST', mode: 'cors', body: fd });
};
</script>
js 代码正在执行 multipart/form-data post 请求。
我不相信 urllib 支持 multipart/form-data,你可以使用请求代替。
import requests
with open('README.md', 'rb') as f:
files = {"file": f}
upload_credentials = {
"descr": "testing",
"title": "READMEE.md",
"contentType": "text",
"editor": username,
}
r = requests.post("http://httpbin.org/post", files=files, data=upload_credentials)
print(r.status_code)
print(r.text)