Відповіді:
У багатьох системах 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, не є інтерактивною.
Дякую за відповіді.
Після гугління навколо я знайшов неспокійний , який являє собою обгортку сценарію оболонки навколо інструменту 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 для хосту + дієслова кортежу необхідно перейти на один рядок у файлі налаштувань.
Зручно.
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
командою для отримання окремих файлів.
Можна використовувати 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
.
Ви можете використовувати інтерактивні 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()
(...)
Так, ви можете скористатися параметром "--config":
Вкажіть ім'я файлу в -K, --config як '-', щоб змусити curl читати файл із stdin.
Приклад:
$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>
Мені дуже подобається рись для інтерактивного перегляду в командному рядку. Хоча це скоріше повний розгорнутий веб-переглядач (який вписується в 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
містить деталі.
get
Команда буде завантажити файлcat
виходу буде файл на екран. Щоб отримати HTTPpost
ви можете використовувати що - щось на кшталт:quote post post.php x=1&y=z
.