क्या पारस्परिक रूप से कर्ल का उपयोग करने का एक तरीका है? या वहाँ एक इंटरैक्टिव कर्ल / wget खोल है?


9

कुछ इस तरह की कल्पना करें:

$ curlsh http://www.example.org
> GET /foo/bar/bam
...output here...
> POST /thing/pool ...
... result here.... 

वहाँ एक उपकरण है जो मुझे ऐसा करने देता है?

जवाबों:


8

कई लिनक्स / यूनिक्स प्रणालियों पर, आपका छद्म कोड बस किसी भी शेल में काम करेगा, हालांकि आपके पथ वास्तव में पूर्ण URL होने चाहिए।

उदाहरण के लिए, डेबियन-आधारित सिस्टम पर, पैकेज libwww-perlLWP-अनुरोध जो कहा जाता है करने के लिए तीन सिमलिंक स्थापित करता है /usr/bin/GET, /usr/bin/HEADऔर /usr/bin/POST। ये वही करते हैं जो आप उम्मीद करते हैं। OpenSuse के perl-libwww-perlपैकेज के हाल के संस्करण सिम्बलिंक को छोड़ देते हैं (जो कि शायद एक बग है), इसलिए आपको उन्हें खुद बनाना होगा या lwp-requestसीधे उपयोग करना होगा । आम तौर पर और कई वर्षों के लिए, यह काफी सुरक्षित धारणा है कि जीईटी, एचईएडी, और पीओएसटी निष्पादनयोग्य यूनिक्स सिस्टम पर उपलब्ध हैं।

बेशक आप curlइन सभी कार्यों के लिए भी उपयोग कर सकते हैं, इसलिए शायद मुझे समझ में नहीं आता है कि आपको क्यों लगता है कि कमांड लाइन शेल जैसे बैश इंटरैक्टिव नहीं है।


8

जवाब के लिए धन्यवाद।

आसपास googling बाद, मैंने पाया Resty है, जो चारों ओर एक खोल स्क्रिप्ट आवरण है कर्ल उपकरण। यह वास्तव में मैं क्या चाहता हूं। यह शेल स्क्रिप्ट की 155 लाइनें हैं, और जब मैं इसे चलाता हूं, मुझे GET, PUT, POST, DELETE और OPTIONS के फ़ंक्शंस मिलते हैं। ये कार्य मेरे पथ पर पाए जाने वाले कर्ल प्रोग्राम के आसपास के रैपर हैं।

यह MacOSX बैश पर इस तरह काम करता है:

$ . resty

$ resty https://api.example.org
https://api.myhost.com*

$ GET /v1/o/orgname -u myusername:password
{
  "createdAt" : 1347007133508,
  "createdBy" : "admin",
  "displayName" : "orgname",
  "environments" : [ "test", "prod" ],
  "lastModifiedAt" : 1347007133508,
  "lastModifiedBy" : "admin",
  "name" : "orgname",
  "properties" : {
    "propertyList" : [ ... ]
  },
}
$

पहली पंक्ति वहां केवल वर्तमान शेल में कमांड को चलाती है।

अगली पंक्ति, "रेस्टी" कमांड, URL बेस सेट करता है। इसके बाद, GET, PUT, POST ... किसी भी कॉल का अर्थ है कि आधार। मैंने एक उदाहरण दिखाया जो कि JSON के पूर्व-निर्धारित उत्सर्जन करता है। मुझे लगता है कि यदि आपका सर्वर मिनिफ़ाई किए गए JSON का उत्सर्जन करता है, तो आप आउटपुट को पाइप करके बाहरी स्क्रिप्ट के साथ इसे प्रिंट कर सकते हैं।

होस्ट-आधारित प्राथमिकताओं के लिए समर्थन है। मान लीजिए कि आपका लक्ष्य होस्ट api.example.org है। एक फ़ाइल को ~ / .resty / api.example.org कहा जाता है, और वहां डालें, ऐसी लाइनें जो तर्क निर्दिष्ट करती हैं जिन्हें उस नाम से होस्ट को हर कर्ल कॉल को पास किया जाना चाहिए। प्रत्येक http वर्ब को अपनी लाइन मिलती है। इसलिए, इस सामग्री को फ़ाइल में सम्मिलित करें:

GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"

... अर्थ यह है कि हर बार जब मैं एक मिलता है जब api.example.org आधार होस्ट नाम है, कर्ल आदेश परोक्ष उपयोग करेगा -uऔर --write-outआर्ग वहाँ दिखाया गया है। (-सूत्र मूल के लिए)।

एक अन्य उदाहरण के रूप में, आप उस फ़ाइल में हेडर को स्वीकार कर सकते हैं, ताकि आप हमेशा XML का अनुरोध करें:

GET --header "Accept: application/xml"

उस प्राथमिकता फ़ाइल में किसी भी कर्ल कमांड लाइन arg का समर्थन किया गया है। होस्ट + क्रिया के लिए सभी कर्ल आर्गन्स को प्राथमिकता फ़ाइल में एक पंक्ति पर जाने की आवश्यकता है।

हैंडी।


6

lftp:

$ lftp http://repo.xplico.org/pool/
cd ok, cwd=/pool
lftp repo.xplico.org:/pool> ls
drwxr-xr-x  --  /
drwxr-xr-x            -  2012-02-13 09:48  main
lftp repo.xplico.org:/pool> cd main
lftp repo.xplico.org:/pool/main> ls
drwxr-xr-x  --  ..
drwxr-xr-x            -  2012-02-13 09:48  x

डायरेक्टरी लिस्टिंग केवल उन वेबसाइटों के लिए काम करती है जो डायरेक्टरी इंडेक्स भेजती हैं। लेकिन भले ही वे आप अभी भी getव्यक्तिगत फ़ाइलों को प्राप्त करने के लिए कमांड का उपयोग नहीं कर सकते ।


getआदेश फ़ाइल डाउनलोड करेगा catस्क्रीन पर इच्छा आउटपुट फ़ाइल। एक http प्राप्त करने के लिए postआप की तरह कुछ का उपयोग कर सकते हैं: quote post post.php x=1&y=z
donothingsuccessfully

5

आप नेटकट का उपयोग कर सकते हैं ।

netcat एक साधारण यूनिक्स उपयोगिता है जो टीसीपी या यूडीपी प्रोटोकॉल का उपयोग करते हुए नेटो वर्क कनेक्शन में डेटा पढ़ता और लिखता है।

यहाँ VLC होम पेज को पुनः प्राप्त करने के लिए एक उदाहरण है

nc www.videolan.org 80
GET http://www.videolan.org/vlc/ HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 16 Oct 2012 07:34:48 GMT
Server: Apache/2.2.16 (Debian)
Content-Location: index.html
[…]

HTML का बाकी कंसोल के लिए आउटपुट है। ध्यान दें: आप टाइप करने की आवश्यकता Return दो बार के बाद HTTP/1.0


4
यार, तुम कट्टर हो। HTTP करने के लिए Netcat? आउच! मैं कुछ और घंटियाँ और सीटी के साथ कुछ के लिए उम्मीद कर रहा था।
चीज़ो

1
मुझे इस बारे में कोई जानकारी नहीं है कि आप क्या कर रहे हैं। कम से कम यह वही करता है जो आपने प्रश्न में कहा था, जो बहुत विस्तृत नहीं था। Netcat एक बहुत ही उपयोगी उपकरण है, वेब ब्राउज़िंग के लिए शायद यह अच्छी तरह से अनुकूल नहीं है। अपनी आवश्यकताओं पर निर्भर करता है।
मार्को

कोई अपराध नहीं, मैं सिर्फ कह रहा हूं, यह अच्छा होगा यदि उपकरण थोड़ा अधिक बुद्धिमान थे। जैसे कि अगर HTTP हेडर सेट करने का कोई तरीका है तो वह भेजेगा। या अगर मुझे प्रत्येक अनुरोध के लिए "एचटीटीपी / 1.1" टाइप नहीं करना था। या आदि
चीजो

1

आप के shellsसाथ pythonया दोनों का उपयोग कर सकते हैं perl:

में पर्ल

$ perl -MWWW::Mechanize::Shell -eshell
(no url)> get http://cnn.com
Retrieving http://cnn.com(200)
http://edition.cnn.com/> title
CNN.com International - Breaking, World, Business, Sports, Entertainment and Video News
http://edition.cnn.com/> content
(...)

देखें perldoc WWW::Mechanize::Shellया http://search.cpan.org/~corion/WWW-Mechanize-Shell-0.52/lib/WWW/Mechanize/Shell.pm


में अजगर :

$ python -i -c 'import mechanize; br = mechanize.Browser(factory=mechanize.RobustFactory())'
>>> br.open("http://xkcd.com/")
<response_seek_wrapper at 0x2824a28 whose wrapped object = <closeable_response at 0x27c2710 whose fp = <socket._fileobject object at 0x27be3d0>>>
>>> br.title()
'xkcd: Identity'
>>> print br.response().read()
(...)

Http://wwwsearch.sourceforge.net/mechanize/ देखें


1

हां, आप "--config" विकल्प का उपयोग कर सकते हैं:

फ़ाइल नाम को -K, --config को '-' के रूप में निर्दिष्ट करें ताकि स्टड से फ़ाइल को कर्ल पढ़ा जा सके।

उदाहरण:

$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>

0

मैं कमांड लाइन पर इंटरैक्टिव ब्राउज़िंग के लिए lynx को काफी पसंद करता हूं । यह एक पूर्ण HTML ब्राउज़र से अधिक है (जो एक ncurses अनुप्रयोग में फिट बैठता है) एक कच्चे HTML उपकरण की तुलना में, हालांकि ..

मैंने पहले SSL पर कच्चे HTML कमांड्स का परीक्षण किया है openssl, जिसके लिए मैंने उपयोग किया था , लेकिन यह केवल एक बार में एक कमांड की अनुमति देता है।

> openssl s_client -quiet -connect google.com:443
GET /
... HTML response

> openssl s_client -quiet -connect myprivateserver.com:443
POST /thing/pool ...
... response

Opensl के s_client विकल्पों के बारे में अधिक जानकारी के लिए, man s_clientविवरण शामिल हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.