मैं अजगर में अनुरोध मॉड्यूल का उपयोग कर निम्नलिखित पोस्ट अनुरोध को दोहराने के लिए कोशिश कर रहा हूँ:अजगर अनुरोध - पोस्ट मल्टीपार्ट/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--
requests के लिए दस्तावेज़ पता चलता है कि फ़ाइलें तर्क होना चाहिए इस्तेमाल किया गया।
जब मैं निम्नलिखित कॉल प्रयास:
import requests
requests.post('http://example.com/example/asdfas', files={'value_1': '12345',
'value_2': '67890'})
मैं निम्नलिखित HTTP अनुरोध:
'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--
मैं भी डेटा तर्क का उपयोग करने की कोशिश की:
import requests
requests.post('http://example.com/example/asdfas', data={'value_1': '12345',
'value_2': '67890'})
जिसके परिणामस्वरूप निम्नलिखित HTTP अनुरोध में:
'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
मेरे पास जो मुद्दा है, वह है कि फाइल तर्क तर्क का उपयोग उस कॉल में होता है जो सर्वर पहचान नहीं करता है, संभावित रूप से HTTP अनुरोध में भेजी गई अप्रत्याशित "फ़ाइल नाम" जानकारी के कारण। डेटा तर्क का प्रयोग गलत सामग्री-प्रकार शीर्षलेख भेजता है।
पहला अनुरोध सर्वर पर काम करने के लिए जाना जाता है जिसे मैं अनुरोध भेजना चाहता हूं - पहले HTTP अनुरोध को समान रूप से दोहराने के लिए सही फ़ंक्शन कॉल क्या है? अपेक्षा के अनुरूप
import requests
requests.post('http://example.com/example/asdfas', files={'value_1': (None, '12345'), 'value_2': (None, '67890')})
काम करता है::
संपादित करें:
<!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>
यह एक अच्छा 'फॉर्म' जैसा नहीं दिखता है ... यदि आप कोशिश करते हैं तो क्या होता है: 'request.post (' http://example.com/example/asdfas ', data = {' name ':' 12345 ' }) '? सर्वर क्या करता है? – BorrajaX
फॉर्म गैर-मानक हो सकता है। मैंने HTML शामिल किया है जिसे एक कार्य अनुरोध बनाने की आवश्यकता होगी। सर्वर सफलता पर एक्सएमएल देता है या यूआरएल विफलताओं पर सर्वर त्रुटि नहीं मिला है। – sornars