有没有办法以交互方式使用 curl?或者是否有交互式 curl/wget shell?

Che*_*eso 9 wget curl

想象一下这样的事情:

$ curlsh http://www.example.org
> GET /foo/bar/bam
...output here...
> POST /thing/pool ...
... result here.... 
Run Code Online (Sandbox Code Playgroud)

有什么工具可以让我这样做吗?

Chr*_*sch 8

在许多 Linux/Unix 系统上,您的伪代码仅适用于任何 shell,尽管您的路径应该是完整的 URL。

例如,在基于Debian的系统中,包libwww-perl装3个符号连接LWP请求这是所谓的/usr/bin/GET/usr/bin/HEAD/usr/bin/POST。这些做你所期望的。OpenSuseperl-libwww-perl软件包的最新版本省略了符号链接(这可能是一个错误),因此您必须自己创建它们或lwp-request直接使用它们。通常,多年来,在 unixoid 系统上可以使用 GET、HEAD 和 POST 可执行文件一直是一个非常安全的假设。

当然你也可以curl用于所有这些任务,所以也许我不明白为什么你觉得像 bash 这样的命令行 shell 不是交互式的。


Che*_*eso 8

感谢您的回答。

在谷歌搜索之后,我发现了resty,它是curl工具周围的 shell 脚本包装器。这真的是我想要的。它有 155 行 shell 脚本,当我运行它时,我得到了 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" : [ ... ]
  },
}
$
Run Code Online (Sandbox Code Playgroud)

那里的第一行只运行当前 shell 中的命令。

下一行,“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"
Run Code Online (Sandbox Code Playgroud)

...意味着每次当 api.example.org 是基本主机名时我执行 GET 时,curl 命令将隐式使用那里显示的-u--write-outargs。(-u 用于基本身份验证)。

作为另一个示例,您可以在该文件中指定 Accept 标头,以便始终请求 XML:

GET --header "Accept: application/xml"
Run Code Online (Sandbox Code Playgroud)

该首选项文件支持任何 curl 命令行参数。host+verb 元组的所有 curl args 都需要在首选项文件中占一行。

便利。


Sté*_*las 6

ftp:

$ 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
Run Code Online (Sandbox Code Playgroud)

目录列表仅适用于发送目录索引的网站。但即使他们不这样做,您仍然可以使用该get命令来获取单个文件。


Mar*_*rco 5

您可以使用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
[…]
Run Code Online (Sandbox Code Playgroud)

其余的 HTML 输出到控制台。注意:您需要输入Return 两次HTTP/1.0

  • 哥们,你是铁杆。Netcat 做HTTP 吗?哎哟!我希望能有更多花里胡哨的东西。 (4认同)