Czy istnieje sposób interaktywnego używania curl? Czy istnieje interaktywna powłoka curl / wget?

9

Wyobraź sobie coś takiego:

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

czy istnieje narzędzie, które pozwala mi to zrobić?

Cheeso
źródło

Odpowiedzi:

8

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-perlinstaluje trzy dowiązania do lwp-żądanie, które są nazywane /usr/bin/GET, /usr/bin/HEADi /usr/bin/POST. Robią to, czego można oczekiwać. Najnowsze wersje pakietu OpenSuse perl-libwww-perlpomijają dowiązania symboliczne (co prawdopodobnie jest błędem), więc musisz je utworzyć samodzielnie lub użyć lwp-requestbezpoś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ć curldo wszystkich tych zadań, więc być może nie rozumiem, dlaczego uważasz, że powłoka wiersza poleceń, taka jak bash, nie jest interaktywna.

Christian Pietsch
źródło
8

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 -ui --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.

Cheeso
źródło
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

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ć getpolecenia, aby uzyskać pojedyncze pliki.

Stéphane Chazelas
źródło
getPolecenie Pobierz plik catwyjściowy będzie plik na ekranie. Aby uzyskać http postmożna użyć coś takiego: quote post post.php x=1&y=z.
donotings udane
5

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.

Marco
źródło
4
Koleś, jesteś hardcorowy. Netcat zrobić HTTP? Auć! Miałem nadzieję na coś jeszcze z kilkoma dzwonkami i gwizdkami.
Cheeso
1
Nie mam pojęcia o co ci chodzi. Przynajmniej robi to, co powiedziałeś w swoim pytaniu, które nie było zbyt szczegółowe. Netcat to bardzo przydatne narzędzie do przeglądania stron internetowych, które może nie jest zbyt odpowiednie. Zależy od twoich potrzeb.
Marco,
Bez obrazy, mówię tylko, byłoby miło, gdyby narzędzie było trochę bardziej inteligentne. Jakby istniał sposób na ustawienie nagłówków HTTP, które będą wysyłane. Lub gdybym nie musiał wpisywać „HTTP / 1.1” dla każdego żądania. lub itp.
Cheeso
1

Można użyć interaktywny shellszarówno z pythonlub 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::Shelllub 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()
(...)

Zobacz http://wwwsearch.sourceforge.net/mechanize/

Gilles Quenot
źródło
1

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>
Steven Penny
źródło
0

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_clientzawiera szczegóły.

Alex Leach
źródło