curlをインタラクティブに使用する方法はありますか?または、インタラクティブなcurl / wgetシェルはありますか?


9

このようなものを想像してみてください:

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

それを可能にするツールはありますか?

回答:


8

多くのLinux / Unixシステムでは、パスは完全なURLである必要がありますが、疑似コードはどのシェルでも機能します。

例えば、Debianベースのシステムでは、パッケージがlibwww-perl呼ばれているLWP-要求に3つのシンボリックリンクをインストールし/usr/bin/GET/usr/bin/HEAD、と/usr/bin/POST。これらはあなたが期待することをします。OpenSuseのperl-libwww-perlパッケージの最近のバージョンでは、シンボリックリンク(おそらくバグ)が省略されているため、自分で作成するか、lwp-request直接使用する必要があります。一般に、そして長年にわたって、GET、HEAD、およびPOST実行可能ファイルがunixoidシステムで使用可能であるというのは、非常に安全な前提です。

もちろんcurl、これらすべてのタスクに使用することもできるので、bashなどのコマンドラインシェルがインタラクティブではないと感じる理由を理解していないかもしれません。


8

答えてくれてありがとう。

周りのグーグルでの後、私が見つかりました。restyシェルスクリプトラッパーである、カールツール。これは本当に私が欲しいものです。これは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"

...これは、api.example.orgがベースホスト名であるときにGETを実行するたびに、curlコマンドはそこに表示される-u--write-outargs を暗黙的に使用することを意味します。(基本認証の場合は-u)。

別の例として、そのファイルでAcceptヘッダーを指定して、常にXMLを要求することができます。

GET --header "Accept: application/xml"

そのプリファレンスファイルでは、すべてのcurlコマンドライン引数がサポートされています。host + verbタプルのすべてのcurl引数は、設定ファイルの1行に記述する必要があります。

ハンディ。


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

ディレクトリリストは、ディレクトリインデックスを送信するWebサイトでのみ機能します。ただし、そうでない場合でも、getコマンドを使用して個々のファイルを取得できます。


getコマンドは、ファイルのダウンロードしますcat画面に意志の出力にファイルを。httpを取得するには、post次のようなものを使用できますquote post post.php x=1&y=z
donothings成功

5

Netcatを使用できます。

netcatは、TCPまたはUDPプロトコルを使用して、ネットワーク接続全体でデータを読み書きするシンプルなUNIXユーティリティです。

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 2回入力する必要がありHTTP/1.0ます。


4
おい、あなたはハードコアだ。NetcatはHTTPを実行しますか?痛い!私はもう少しベルとホイッスルが付いている何かを望んでいました。
Cheeso

1
あなたが何をしているのか私にはわかりません。少なくともそれはあなたがあなたの質問で述べたことをします、それは非常に詳細ではありませんでした。Netcatは非常に便利なツールであり、Webブラウジングはそれほど適切ではないかもしれません。あなたのニーズに依存します。
マルコ、

問題はありません。ただ、ツールがもう少しインテリジェントになっていればいいのです。送信するHTTPヘッダーを設定する方法がある場合と同様です。または、リクエストごとに「HTTP / 1.1」と入力する必要がなかった場合。等
Cheeso

1

あなたは、インタラクティブに使用できるshellsとの両方pythonperl

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()
(...)

http://wwwsearch.sourceforge.net/mechanize/を参照してください


1

はい、「-config」オプションを使用できます。

ファイル名を-K、-configに「-」と指定して、curlがstdinからファイルを読み取るようにします。

例:

$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>

0

コマンドラインでインタラクティブなブラウジングをするためのlynxがとても好きです。けれどもそれは、生のHTMLツールというよりは(ncursesアプリケーションに適合する)本格的なブラウザのほうがいいです。

以前にSSLで生のHTMLコマンドをテストしましたが、これにはを使用opensslしましたが、これは一度に1つのコマンドしか許可しません。

> 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の詳細については、詳細が含まれています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.