Ответы:
Во многих системах Linux / Unix ваш псевдокод будет работать в любой оболочке, хотя ваши пути должны быть полными URL-адресами.
Например, в системах Debian на базе, пакет libwww-perl
устанавливает три символические ссылки на LWP-запрос , которые называются /usr/bin/GET
, /usr/bin/HEAD
и /usr/bin/POST
. Они делают то, что вы ожидаете. Последние версии пакета OpenSuse perl-libwww-perl
пропускают символические ссылки (что, вероятно, является ошибкой), поэтому вам придется создавать их самостоятельно или использовать lwp-request
напрямую. В целом и на протяжении многих лет было вполне безопасным предположение, что исполняемые файлы GET, HEAD и POST доступны в системах unixoid.
Конечно, вы могли бы также использовать curl
для всех этих задач, поэтому, возможно, я не понимаю, почему вы чувствуете, что оболочка командной строки, такая как bash, не является интерактивной.
Спасибо за ответы.
Поискав в поиске , я нашел resty , который является оболочкой сценария оболочки для инструмента curl . Это действительно то, чего я хочу. Это 155 строк сценария оболочки, и когда я его запускаю, я получаю функции для GET, PUT, POST, DELETE и OPTIONS. Эти функции - просто обертки вокруг программы curl, найденной на моем пути.
Это работает так на 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 и вставьте туда строки, которые определяют аргументы, которые должны передаваться при каждом вызове curl хосту с этим именем. Каждый глагол http получает свою собственную строку. Итак, вставив этот контент в файл:
GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"
... означает , что каждый раз , когда я делаю GET , когда api.example.org является базой имя хоста, команда локон будет неявно использовать -u
и --write-out
показано, арг. (-u для базовой аутентификации).
В качестве другого примера вы можете указать заголовок Accept в этом файле, чтобы всегда запрашивать XML:
GET --header "Accept: application/xml"
Любой аргумент командной строки curl поддерживается в этом файле настроек. Все аргументы curl для кортежа host + verb должны находиться в одной строке в файле настроек.
Handy.
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
Для получения дополнительной информации об опциях openssl s_client, man s_client
содержит детали.
get
загрузит файл,cat
выведет файл на экран. Чтобы получить HTTPpost
вы можете использовать что - то вроде:quote post post.php x=1&y=z
.