Odpowiedzi:
W wielu systemach Linux / Unix twój pseudokod będzie działał w dowolnej powłoce, chociaż twoje ścieżki powinny być naprawdę pełnymi adresami URL.
Na przykład, w systemach opartych na Debianie, pakiet libwww-perl
instaluje trzy dowiązania do lwp-żądanie, które są nazywane /usr/bin/GET
, /usr/bin/HEAD
i /usr/bin/POST
. Robią to, czego można oczekiwać. Najnowsze wersje pakietu OpenSuse perl-libwww-perl
pomijają dowiązania symboliczne (co prawdopodobnie jest błędem), więc musisz je utworzyć samodzielnie lub użyć lwp-request
bezpośrednio. Ogólnie i przez wiele lat było całkiem bezpieczne założenie, że pliki wykonywalne GET, HEAD i POST są dostępne w systemach unixoid.
Oczywiście możesz również użyć curl
do wszystkich tych zadań, więc być może nie rozumiem, dlaczego uważasz, że powłoka wiersza poleceń, taka jak bash, nie jest interaktywna.
Dziękuję za odpowiedzi.
Po googlingu znalazłem resty , który jest opakowaniem skryptu powłoki wokół narzędzia do zwijania . Tego naprawdę chcę. Ma 155 linii skryptu powłoki, a kiedy go uruchamiam, dostaję funkcje GET, PUT, POST, DELETE i OPTIONS. Te funkcje są tylko opakowaniami wokół programu curl znalezionego na mojej ścieżce.
Działa to tak na 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" : [ ... ]
},
}
$
Pierwszy wiersz po prostu uruchamia polecenia w bieżącej powłoce.
Następny wiersz, polecenie „resty”, ustawia podstawę adresu URL. Następnie każde wywołanie GET, PUT, POST ... domyślnie odwołuje się do tej bazy. Pokazałem przykład, który emituje prettified JSON. Myślę, że jeśli twój serwer emituje zminimalizowany JSON, możesz go wydrukować za pomocą zewnętrznego skryptu, przesyłając dane wyjściowe.
Istnieje obsługa preferencji opartych na hoście. Załóżmy, że Twoim hostem docelowym jest api.example.org. Utwórz plik o nazwie ~ / .resty / api.example.org i wstaw tam wiersze, które określają argumenty, które powinny być przekazywane do każdego wywołania curl do hosta o tej nazwie. Każdy czasownik http ma własną linię. Tak więc wstawianie tej zawartości do pliku:
GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"
... oznacza, że za każdym razem, gdy robię GET, gdy api.example.org jest podstawową nazwą hosta, polecenie curl domyślnie używa wyświetlanych tam argumentów -u
i --write-out
. (-u dla podstawowego uwierzytelnienia).
Jako kolejny przykład możesz podać nagłówek Accept w tym pliku, aby zawsze żądać XML:
GET --header "Accept: application/xml"
Argument linii wiersza polecenia jest obsługiwany w tym pliku preferencji. Wszystkie argumenty curl dla krotki host + czasownik muszą przejść do pojedynczej linii w pliku preferencji.
Poręczny.
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
Listy katalogów działają tylko w przypadku witryn, które wysyłają indeksy katalogów. Ale nawet jeśli nie, nadal możesz użyć get
polecenia, aby uzyskać pojedyncze pliki.
Możesz użyć Netcat .
netcat to proste narzędzie uniksowe, które odczytuje i zapisuje dane w połączeniach sieciowych, używając protokołu TCP lub UDP.
Oto przykład pobrania strony głównej 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
[…]
Reszta kodu HTML jest wysyłana do konsoli. Uwaga: musisz wpisać Return dwa razy później HTTP/1.0
.
Można użyć interaktywny shells
zarówno z python
lub perl
:
W Perlu
$ 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
(...)
Zobacz perldoc WWW::Mechanize::Shell
lub http://search.cpan.org/~corion/WWW-Mechanize-Shell-0.52/lib/WWW/Mechanize/Shell.pm
W Pythonie :
$ 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()
(...)
Tak, możesz użyć opcji „--config”:
Podaj nazwę pliku na -K, --config jako '-', aby curl odczytał plik ze standardowego wejścia.
Przykład:
$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>
Bardzo lubię rysia do interaktywnego przeglądania w wierszu poleceń. Jest to bardziej pełnoprawna przeglądarka (która pasuje do aplikacji ncurses) niż surowe narzędzie HTML, chociaż ...
Wcześniej testowałem nieprzetworzone polecenia HTML za pomocą protokołu SSL, dla których korzystałem openssl
, ale pozwala to tylko na jedno polecenie na raz ...
> openssl s_client -quiet -connect google.com:443
GET /
... HTML response
> openssl s_client -quiet -connect myprivateserver.com:443
POST /thing/pool ...
... response
Aby uzyskać więcej informacji na temat opcji s_client openssl, man s_client
zawiera szczegóły.
get
Polecenie Pobierz plikcat
wyjściowy będzie plik na ekranie. Aby uzyskać httppost
można użyć coś takiego:quote post post.php x=1&y=z
.