Tôi cố gắng để tái tạo các yêu cầu POST dưới, sử dụng các module yêu cầu trong python:yêu cầu python - POST multipart/form-data mà không cần tên tập tin trong yêu cầu HTTP
POST /example/asdfas HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------241652170216373
Content-Length: 279
-----------------------------241652170216373
Content-Disposition: form-data; name="value_1"
12345
-----------------------------241652170216373
Content-Disposition: form-data; name="value_2"
67890
-----------------------------241652170216373--
Các tài liệu cho requests gợi ý rằng đối số file nên được dùng.
Khi tôi cố gắng gọi sau đây:
import requests
requests.post('http://example.com/example/asdfas', files={'value_1': '12345',
'value_2': '67890'})
tôi nhận được yêu cầu HTTP sau:
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, compress',
'Content-Length': '264',
'User-Agent': 'python-requests/2.2.1 CPython/3.3.2 Windows/7',
'Content-Type': 'multipart/form-data; boundary=273f13699c02429db4eb95c97f757d38'
--273f13699c02429db4eb95c97f757d38
Content-Disposition: form-data; name="value_1"; filename="value_1"
12345
--273f13699c02429db4eb95c97f757d38
Content-Disposition: form-data; name="value_2"; filename="value_2"
67890
--273f13699c02429db4eb95c97f757d38--
Tôi cũng đã cố gắng sử dụng các tham số dữ liệu:
import requests
requests.post('http://example.com/example/asdfas', data={'value_1': '12345',
'value_2': '67890'})
kết quả trong yêu cầu HTTP sau:
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': '27',
'User-Agent': 'python-requests/2.2.1 CPython/3.3.2 Windows/7',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, compress'
value_2=67890&value_1=12345
Vấn đề tôi gặp phải là sử dụng đối số tệp dẫn đến một cuộc gọi mà máy chủ không nhận ra, có lẽ do thông tin "tên tệp" không mong muốn được gửi trong yêu cầu HTTP. Sử dụng đối số dữ liệu sẽ gửi tiêu đề Loại Nội dung sai.
Yêu cầu đầu tiên được biết là đang hoạt động trên máy chủ mà tôi muốn gửi yêu cầu đến - cuộc gọi hàm chính xác để sao chép giống hệt yêu cầu HTTP đầu tiên là gì?
Edit: hình thức HTML mẫu để nhân rộng các yêu cầu làm việc:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="http://example.com/example/asdfas" method="post" enctype="multipart/form-data">
<label for="v1">Value 1</label>
<input id="v1" type="text" name="value_1">
<label for="v2">Value 2</label>
<input id="v2" type="text" name="value_2">
<input type="submit">
</form>
</body>
</html>
Điều đó không giống như một 'form' tốt ... điều gì sẽ xảy ra nếu bạn thử:' requests.post ('http://example.com/example/asdfas', data = {'name': '12345' }) '? Máy chủ làm gì? – BorrajaX
Biểu mẫu có thể không chuẩn. Tôi đã bao gồm HTML sẽ được yêu cầu để tạo một yêu cầu làm việc. Máy chủ trả về XML khi thành công hoặc lỗi không tìm thấy lỗi máy chủ trên các lỗi. – sornars