मैं सोच रहा हूं कि क्या कोई मेरे साथ मल्टीपार्ट / फॉर्म-डेटा का उदाहरण साझा कर सकता है:
- कुछ फार्म पैरामीटर
- कई फाइलें
मैं सोच रहा हूं कि क्या कोई मेरे साथ मल्टीपार्ट / फॉर्म-डेटा का उदाहरण साझा कर सकता है:
जवाबों:
संपादित करें : मैं एक समान, लेकिन अधिक गहराई से उत्तर दे रहा हूं: https://stackoverflow.com/a/28380690/895245
वास्तव में क्या हो रहा है यह देखने के लिए, nc -l
एक ECHO सर्वर और एक ब्राउज़र या cURL जैसे उपयोगकर्ता एजेंट का उपयोग करें।
फ़ॉर्म को .html
फ़ाइल में सहेजें :
<form action="http://localhost:8000" method="post" enctype="multipart/form-data">
<p><input type="text" name="text" value="text default">
<p><input type="file" name="file1">
<p><input type="file" name="file2">
<p><button type="submit">Submit</button>
</form>
अपलोड करने के लिए फ़ाइलें बनाएँ:
echo 'Content of a.txt.' > a.txt
echo '<!DOCTYPE html><title>Content of a.html.</title>' > a.html
Daud:
nc -l localhost 8000
अपने ब्राउज़र पर HTML खोलें, फाइलों का चयन करें और सबमिट पर क्लिक करें और टर्मिनल की जांच करें।
nc
प्राप्त अनुरोध को प्रिंट करता है। फ़ायरफ़ॉक्स भेजा:
POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.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
Cookie: __atuvc=34%7C7; permanent=0; _gitlab_session=226ad8a0be43681acf38c2fab9497240; __profilin=p%3Dt; request_method=GET
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------9051914041544843365972754266
Content-Length: 554
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="text"
text default
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="file1"; filename="a.txt"
Content-Type: text/plain
Content of a.txt.
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html
<!DOCTYPE html><title>Content of a.html.</title>
-----------------------------9051914041544843365972754266--
Aternativelly, cURL को आपके ब्राउज़र फॉर्म के समान POST अनुरोध भेजना चाहिए:
nc -l localhost 8000
curl -F "text=default" -F "file1=@a.html" -F "file1=@a.txt" localhost:8000
आप इसके साथ कई परीक्षण कर सकते हैं:
while true; do printf '' | nc -l localhost 8000; done
boundary=---------------------------9051914041544843365972754266
से दो हाइफ़न कम है । यह वास्तव में है, वास्तव में सभी हाइफ़न को एक साथ घूमते हुए देखना कठिन है।
curl --trace-ascii <logfilename> .....
भेजा और प्राप्त डेटा देखने के लिए भी उपयोगी है।
curl -trace <logfilename> ....
बाइनरी भी दिखाएगा। अवलोकन करने के लिए <LF> बनाम <CR> <LF>।
@Ciro Santilli जवाब के लिए बहुत धन्यवाद! मैंने पाया कि सीमा के लिए उसकी पसंद काफी "दुखी" है क्योंकि सभी हाइफ़न: वास्तव में, जैसा कि @ फ़ेक नाम ने टिप्पणी की, जब आप अनुरोध के अंदर अपनी सीमा का उपयोग कर रहे हैं तो यह सामने दो और हाइफ़न के साथ आता है:
उदाहरण:
POST / HTTP/1.1
HOST: host.example.com
Cookie: some_cookies...
Connection: Keep-Alive
Content-Type: multipart/form-data; boundary=12345
--12345
Content-Disposition: form-data; name="sometext"
some text that you wrote in your html form ...
--12345
Content-Disposition: form-data; name="name_of_post_request" filename="filename.xyz"
content of filename.xyz that you upload in your form with input[type=file]
--12345
Content-Disposition: form-data; name="image" filename="picture_of_sunset.jpg"
content of picture_of_sunset.jpg ...
--12345--
मैंने इस w3.org पेज पर पाया कि मल्टीपार्ट / फॉर्म-डेटा में मल्टीपार्ट / मिक्स्ड हैडर को असंगत करना संभव है, बस मल्टीपार्ट / मिक्स के अंदर एक और बाउंड्री स्ट्रिंग का चयन करना और उस एक का उपयोग करके डेटा को इनकैप्सुलेट करना है। अंत में, आपको POST अनुरोध को बंद करने के लिए FILO क्रम में उपयोग की जाने वाली सभी सीमाओं को "बंद" करना होगा (जैसे:
POST / HTTP/1.1
...
Content-Type: multipart/form-data; boundary=12345
--12345
Content-Disposition: form-data; name="sometext"
some text sent via post...
--12345
Content-Disposition: form-data; name="files"
Content-Type: multipart/mixed; boundary=abcde
--abcde
Content-Disposition: file; file="picture.jpg"
content of jpg...
--abcde
Content-Disposition: file; file="test.py"
content of test.py file ....
--abcde--
--12345--
ऊपर दिए गए लिंक पर एक नज़र डालें।
Content-Disposition
के साथ ;
?
17.13.4 Form content types
आप क्या चाहते हैं मिल जाएगा।