Answers:
在许多Linux / Unix系统上,尽管您的路径实际上应该是完整的URL,但是您的伪代码将可以在任何shell中使用。
例如,在基于Debian的系统中,包libwww-perl
装3个符号连接LWP请求这是所谓的/usr/bin/GET
,/usr/bin/HEAD
和/usr/bin/POST
。这些可以达到您的期望。OpenSuse perl-libwww-perl
软件包的最新版本省略了符号链接(这可能是一个错误),因此您必须自己创建或lwp-request
直接使用它们。通常,多年来,一直非常安全地假设GET,HEAD和POST可执行文件在unixoid系统上可用。
当然,您也可以使用curl
所有这些任务,所以也许我不明白为什么您会觉得bash之类的命令行外壳不是交互式的。
感谢您的回答。
围绕谷歌搜索后,我发现resty,这是围绕一个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。主机+动词元组的所有curl参数都需要在首选项文件中一行。
便利。
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
目录列表仅适用于确实发送目录索引的网站。但是,即使没有,您仍然可以使用get
命令来获取单个文件。
您可以使用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
[…]
HTML的其余部分将输出到控制台。注意:您需要在后面输入Return 两次HTTP/1.0
。
您可以shells
同时使用python
或进行交互perl
:
在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()
(...)
我非常喜欢lynx在命令行上进行交互式浏览。不过,与原始HTML工具相比,它更像是功能全面的浏览器(适合ncurses应用程序)。
我曾经使用SSL来测试过基于SSL的原始HTML命令openssl
,但这一次只允许一个命令。
> 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
包含详细信息。
get
命令将下载文件,cat
并将文件输出到屏幕。为了得到一个HTTPpost
你可以使用这样的:quote post post.php x=1&y=z
。