Чи є спосіб використовувати curl інтерактивно? Або є інтерактивна оболонка curl / wget?


9

Уявіть щось подібне:

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

чи є інструмент, який дозволяє мені це робити?

Відповіді:


8

У багатьох системах Linux / Unix ваш псевдокод буде просто працювати в будь-якій оболонці, хоча ваші шляхи дійсно повинні бути повними URL-адресами.

Наприклад, в системах Debian на базі, пакет libwww-perlвстановлює три символічні посилання на LWP-запит , які називаються /usr/bin/GET, /usr/bin/HEADі /usr/bin/POST. Вони роблять те, що ви очікували. Останні версії perl-libwww-perlпакета OpenSuse опускають символьні посилання (що, ймовірно, помилка), тому вам доведеться створити їх самостійно або використовувати lwp-requestбезпосередньо. Взагалі і протягом багатьох років було цілком надійним припущенням, що виконувані файли GET, HEAD та POST доступні в unixoid системах.

Звичайно, ви також можете використовувати curlдля всіх цих завдань, тому, можливо, я не розумію, чому ви вважаєте, що оболонка командного рядка, наприклад, bash, не є інтерактивною.


8

Дякую за відповіді.

Після гугління навколо я знайшов неспокійний , який являє собою обгортку сценарію оболонки навколо інструменту curl . Це дійсно те, що я хочу. Це 155 рядків скрипту оболонки, і коли я його запускаю, я отримую функції для GET, PUT, POST, DELETE та OPTIONS. Ці функції є просто обгортками навколо програми завивки, знайденої на моєму шляху.

Це працює так у MacOSX bash:

$ . 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" : [ ... ]
  },
}
$

Перший рядок просто виконує команди в поточній оболонці.

Наступний рядок, команда "resty", встановлює базу URL-адрес. Після цього будь-який виклик GET, PUT, POST ... неявно посилається на цю базу. Я показав приклад, який випромінює попередньо очищений JSON. Я думаю, що якщо ваш сервер випромінює JSON, то ви можете роздрукувати його за допомогою зовнішнього скрипта, проклавши висновок.

Існує підтримка налаштувань на основі хоста. Припустимо, ваш цільовий хост - api.example.org. Перервіть файл під назвою ~ / .resty / api.example.org і вставте туди рядки, які вказують аргументи, які слід передавати кожному виклику згортання хосту під цим іменем. Кожен http дієслова отримує свій рядок. Отже, вставивши цей вміст у файл:

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

... означає, що кожного разу, коли я роблю GET, коли api.example.org є базовим іменем хоста, команда curl неявно використовуватиме показані там -uі --write-outаргументи. (-у для основної авт.)

В якості іншого прикладу ви можете вказати заголовок Accept у цьому файлі, щоб ви завжди вимагали XML:

GET --header "Accept: application/xml"

У файлі налаштувань підтримується будь-який аргумент командного рядка curl. Усі аргументи curl для хосту + дієслова кортежу необхідно перейти на один рядок у файлі налаштувань.

Зручно.


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.
доношено успішно

5

Можна використовувати Netcat .

netcat - це проста утиліта unix, яка зчитує та записує дані через мережеві з'єднання, використовуючи протокол TCP або UDP.

Ось приклад для отримання домашньої сторінки 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
Чувак, ти хардкор. Netcat робити HTTP? ой! Я сподівався на щось із ще кількома дзвіночками та свистками.
Сисо

1
Я не маю уявлення про те, що ти шукаєш. Принаймні це робить те, про що ви сказали у своєму запитанні, яке було не дуже докладно. Netcat - дуже зручний інструмент, для веб-перегляду, можливо, не дуже добре. Залежить від ваших потреб.
Марко

Без образи, я просто кажу, було б добре, якби інструмент був трохи розумнішим. Як би, якби був спосіб встановити заголовки HTTP, які він надсилатиме. Або якщо мені не довелося вводити "HTTP / 1.1" для кожного запиту. або т. д.
Cheeso

1

Ви можете використовувати інтерактивні shellsта з pythonабо perl:

У 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 :

$ 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 читати файл із stdin.

Приклад:

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

0

Мені дуже подобається рись для інтерактивного перегляду в командному рядку. Хоча це скоріше повний розгорнутий веб-переглядач (який вписується в ncurses-додаток), ніж сирий інструмент HTML.

Раніше я перевіряв необроблені команди HTML через SSL, для чого я використовував openssl, але це дозволяє лише одну команду за один раз.

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

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

Для отримання додаткової інформації про s_client параметри openssl, man s_clientмістить деталі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.