Stellen Sie sich so etwas vor:
$ curlsh http://www.example.org
> GET /foo/bar/bam
...output here...
> POST /thing/pool ...
... result here....
Gibt es ein Tool, mit dem ich das machen kann?
Auf vielen Linux / Unix-Systemen funktioniert Ihr Pseudocode nur in jeder Shell, obwohl Ihre Pfade eigentlich vollständige URLs sein sollten.
Auf Debian-basierten Systemen libwww-perl
installiert das Paket beispielsweise drei Symlinks zu lwp-request, die aufgerufen /usr/bin/GET
werden /usr/bin/HEAD
, und /usr/bin/POST
. Diese tun, was Sie erwarten würden. In neueren Versionen des OpenSuse- perl-libwww-perl
Pakets werden die Symlinks weggelassen (was wahrscheinlich ein Fehler ist), sodass Sie sie selbst erstellen oder lwp-request
direkt verwenden müssten . Im Allgemeinen und seit vielen Jahren ist es eine ziemlich sichere Annahme, dass ausführbare Dateien von GET, HEAD und POST auf unixoiden Systemen verfügbar sind.
Natürlich können Sie sie auch curl
für all diese Aufgaben verwenden. Vielleicht verstehe ich nicht, warum Sie der Meinung sind, dass eine Befehlszeilen-Shell wie bash nicht interaktiv ist.
Danke für die Antworten.
Nachdem ich herumgegoogelt hatte , fand ich resty , einen Shell-Skript-Wrapper um das Curl- Tool. Das ist wirklich was ich will. Es sind 155 Zeilen Shell-Skript, und wenn ich es ausführe, erhalte ich Funktionen für GET, PUT, POST, DELETE und OPTIONS. Diese Funktionen sind nur Wrapper um das Curl-Programm, das sich auf meinem Pfad befindet.
Unter MacOSX Bash funktioniert das folgendermaßen:
$ . 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" : [ ... ]
},
}
$
In der ersten Zeile werden nur die Befehle in der aktuellen Shell ausgeführt.
Die nächste Zeile, der Befehl "resty", legt die URL-Basis fest. Danach verweist jeder Aufruf von GET, PUT, POST ... implizit auf diese Basis. Ich habe ein Beispiel gezeigt, das hübsches JSON ausgibt. Ich denke, wenn Ihr Server minimiertes JSON ausgibt, können Sie es mit einem externen Skript drucken, indem Sie die Ausgabe weiterleiten.
Hostbasierte Einstellungen werden unterstützt. Angenommen, Ihr Zielhost ist api.example.org. Erstellen Sie eine Datei mit dem Namen ~ / .resty / api.example.org und fügen Sie dort Zeilen ein, die Argumente angeben, die unter diesem Namen an jeden Curl-Aufruf an den Host übergeben werden sollen. Jedes http-Verb erhält eine eigene Zeile. Einfügen dieses Inhalts in die Datei:
GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"
... bedeutet, dass jedes Mal, wenn ich ein GET mache, wenn api.example.org der Basis-Hostname ist, der Befehl curl implizit die dort gezeigten -u
und --write-out
args verwendet. (-u für Basisauthentifizierung).
Als weiteres Beispiel können Sie den Accept-Header in dieser Datei angeben, sodass Sie immer XML anfordern:
GET --header "Accept: application/xml"
Jedes Curl-Befehlszeilenargument wird in dieser Voreinstellungsdatei unterstützt. Alle Curl-Argumente für das Host + Verb-Tupel müssen in der Einstellungsdatei in einer einzigen Zeile stehen.
Praktisch.
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
Verzeichnislisten funktionieren nur für Websites, die Verzeichnisindizes senden. Aber auch wenn dies nicht der get
Fall ist, können Sie den Befehl verwenden, um einzelne Dateien abzurufen.
get
Befehl lädt die Datei herunter undcat
gibt die Datei auf dem Bildschirm aus. Um eine http zu erhaltenpost
, können Sie Folgendes verwenden :quote post post.php x=1&y=z
.Sie können Netcat verwenden .
Hier ist ein Beispiel zum Abrufen der VLC-Homepage
Der Rest des HTML wird an die Konsole ausgegeben. Hinweis: Sie müssen danach Return zweimal eingeben
HTTP/1.0
.quelle
Sie können interaktiv
shells
sowohl mitpython
als auchperl
:In Perl
Siehe
perldoc WWW::Mechanize::Shell
oder http://search.cpan.org/~corion/WWW-Mechanize-Shell-0.52/lib/WWW/Mechanize/Shell.pmIn Python :
Siehe http://wwwsearch.sourceforge.net/mechanize/
quelle
Ja, Sie können die Option "--config" verwenden:
Beispiel:
quelle
Ich mag Luchs für das interaktive Surfen in der Kommandozeile. Es ist jedoch eher ein ausgewachsener Browser (der in eine ncurses-Anwendung passt) als ein rohes HTML-Tool.
Ich habe zuvor rohe HTML-Befehle über SSL getestet, für die ich verwendet habe
openssl
, aber dies erlaubt jeweils nur einen Befehl.Weitere Informationen zu den s_client-Optionen von openssl
man s_client
finden Sie in den Details.quelle