मैनुअल HTTP (एस) अनुरोध


10

मैं एक उपकरण (संभवतः लिनक्स पर) की तलाश कर रहा हूं जो मुझे एक मैनुअल एचटीटीपी या एचटीटीपीएस अनुरोध करने की अनुमति देगा। मैन्युअल रूप से, मेरा वास्तव में इसका मतलब है: मुझे इसे एक पाठ फ़ाइल खिलाने में सक्षम होना चाहिए जो दिखता है

POST /foo HTTP/1.1
Host: www.example.com
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Content-Type: text/plain
Content-Length: 11

Hello world

और एक गंतव्य URL (www.example.com/foo), और URL को अनुरोध भेजें। अधिक से अधिक, यह उपयोगी होगा यदि Content_Length हेडर स्वचालित रूप से गणना की गई थी।

मैं पायथन में कैंपलिब जैसी कुछ लाइब्रेरी का उपयोग करके इस तरह के टूल को लिखने में सक्षम हो सकता हूं, लेकिन इसकी बहुत आवश्यकता है कि मुझे मैन्युअल जांच करने की आवश्यकता है जब कुछ ऐसे पुस्तकालयों के साथ कुछ गलत होता है।


1
https विशिष्ट प्रश्न: superuser.com/questions/346958/…
Ciro Santilli 冠状 us us us 审查

जवाबों:


10

wget में एक -post-file विकल्प है जो आपके लिए काम करना चाहिए।

संपादित करें: इसके अलावा, Ncat है , जिसे आप Randolf रिचर्डसन के टेलनेट सुझाव के समान शैली में उपयोग करेंगे, सिवाय इसके कि यह SSL / HTTPS का भी समर्थन करता है:

ncat -C --ssl www.example.com 443 < input.txt > output.txt

6
अगर आपको HTTPS की जरूरत है, तो netcat के बजाय
Opensl का उपयोग करें

1
wget --post- फ़ाइल हेडर को जोड़ेगी और केवल अनुरोध के मुख्य भाग के लिए निर्दिष्ट फ़ाइल का उपयोग करेगी।
डेविड बालैसिक

6

HTTP (HTTPS नहीं) के लिए, "wget" कमांड का एक विकल्प जो दिमाग में आता है, वह टेलनेट का उपयोग इस प्रकार है:

  • telnet hostname 80 <input.txt> output.txt

फ़ाइल "input.txt" आपकी पूर्व-निर्धारित कमांडों की सूची है जिसे आप होस्टनाम पर होस्ट को खिलाना चाहते हैं और फ़ाइल "output.txt" प्रतिक्रिया को संग्रहीत करेगा।


1
इससे मुझे आश्चर्य हुआ कि अगर नेटकैट एसएसएल और लो-एंड-बीहोल्ड का समर्थन करता है, तो एनसीएटी, एक एसएसएल-सक्षम नेटसैट क्लोन है।
क्रिस ऐचसन

@ क्रिस ऐचसन (+1): यह शानदार है! कृपया बेझिझक कॉपी करें कि मैंने एक अलग उत्तर में क्या लिखा था और इसे एक समाधान के लिए अनुकूलित करें जो NetCat का उपयोग करता है (यदि आप ऐसा करते हैं तो मैं आपके उत्तर के लिए मतदान करूंगा)।
रैंडोल्फ रिचर्डसन

1

आप OpenSSL के साथ GET अनुरोध जारी कर सकते हैं:

openssl s_client -quiet -connect cdn.sstatic.net:443 <<eof
GET /stackexchange/js/universal-login.js HTTP/1.1
Connection: close
Host: cdn.sstatic.net

eof

ध्यान दें कि आप "HTTP / 2" का भी उपयोग कर सकते हैं, लेकिन सावधान रहें क्योंकि कुछ सर्वर (जैसे github.com) इसका समर्थन नहीं करते हैं।


0

मेरे लिए, यह एक अनुरोध फ़ाइल बनाने में काम किया (उदाहरण: request.txt)

POST /foo HTTP/1.1
Host: www.example.com
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Content-Type: text/plain; charset=utf-8
Content-Length: 11
Connection: close

Hello world

और फिर openssl s_clientकमांड को कॉल करें :

cat request.txt | openssl s_client -quiet -connect www.example.com:443

हालांकि, कुछ बिंदुओं के बारे में सावधान रहें:

  • फ़ाइल को ठीक से एन्कोड किया जाना चाहिए , विशेष रूप से सामग्री बॉडी। यदि आप Content-type: text/plain; charset=utf-8फ़ाइल को utf-8 एन्कोडेड करते हैं तो बेहतर है कि आप हेडर शामिल करें ।
  • लाइन अंत हेडर के लिए होना चाहिए CR / वामो । केवल LF के साथ ही वेब सर्वर वापस आ सकता है HTTP/1.1 505 HTTP Version Not Supported, क्योंकि मानक HTTP प्रोटोकॉल लाइन एंडिंग के लिए CR / LF ( https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html ) का उपयोग करता है । आप unix2dosइस रूपांतरण को करने के लिए कमांड का उपयोग कर सकते हैं ।
  • Connection: closeअनुरोध को समाप्त करने और कॉल से लौटने के लिए एक हेडर जोड़ें । अन्यथा, कमांड को उपयोगकर्ता इंटरैक्शन की प्रतीक्षा होगी, यदि सर्वर सामान्य रूप से Connection: keep-aliveहेडर के साथ प्रतिक्रिया करता है ।

-1

मैं हैरान हूँ कि कोई भी उल्लेख किया cURL । यह वास्तव में आप क्या करना चाहते हैं के लिए बनाया गया है। और यह व्यावहारिक रूप से किसी भी मंच (विंडोज सहित) पर उपलब्ध है।

तो आपके उदाहरण के लिए आप यह करेंगे:

curl -H 'Content-Type: text/plain' -d 'Hello World' www.example.com

Wireshark से कब्जा कर लिया है जो आप शुद्ध होगा:

POST / HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15
Host: www.example.com
Accept: */*
Content-Type: text/plain
Content-Length: 11

Hello world

आप आसानी से हेडर को और संशोधित कर सकते हैं यदि आप सभी प्रकार के सामान करना चाहते हैं (अर्थात उपयोगकर्ता-एजेंट को बदलना, आदि)।

संपादित करें: "फ़ाइल से" आवश्यकता पर ध्यान नहीं दिया। आप ऐसा भी कर सकते हैं, या तो सादा एससीआई या बाइनरी फाइलें। आप केवल एक @ प्रतीक के साथ फ़ाइल नाम निर्दिष्ट करते हैं

-d @/tmp/HelloWorldFile

कर्ल लगभग वही है जो मैं चाहता हूं, लेकिन मुझे कमांड लाइन पर हेडर निर्दिष्ट करने की आवश्यकता है, जो बहुत अव्यवहारिक है। मुझे कुछ ऐसा चाहिए जो मुझे एक फ़ाइल से विधि और हेडर सहित अनुरोध के पूर्ण पाठ को निर्दिष्ट करने की अनुमति देता है , और एनसीएटी मुझे जो चाहता है, उसे पूरा करता है। वैसे भी धन्यवाद :-)
एंड्रिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.