想象一下这样的事情:
$ 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-out
args。 (-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>