有没有办法交互式地使用curl?或者有交互式的curl/wget shell 吗?

有没有办法交互式地使用curl?或者有交互式的curl/wget shell 吗?

想象一下这样的事情:

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

有没有一个工具可以让我做到这一点?

答案1

在许多 Linux/Unix 系统上,您的伪代码只能在任何 shell 中运行,尽管您的路径实际上应该是完整的 URL。

例如,在基于 Debian 的系统上,该软件包libwww-perl会安装三个指向 lwp-request 的符号链接,分别称为/usr/bin/GET/usr/bin/HEAD/usr/bin/POST。这些功能正如您所期望的那样。 OpenSuse 软件包的最新版本perl-libwww-perl省略了符号链接(这可能是一个错误),因此您必须自己创建它们或lwp-request直接使用它们。一般来说,多年来,人们可以相当安全地假设 GET、HEAD 和 POST 可执行文件在 unixoid 系统上可用。

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

答案2

感谢您的回答。

谷歌搜索后,我发现休息,这是一个 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" : [ ... ]
  },
}
$

第一行只运行当前 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"

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

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

GET --header "Accept: application/xml"

该首选项文件支持任何curl 命令行arg。主机+动词元组的所有卷曲参数都需要位于首选项文件中的一行上。

便利。

答案3

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

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

答案4

是的,您可以使用“--config”选项:

将文件名指定为-K,--config为'-'以使curl从stdin读取文件。

例子:

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

相关内容