在 Linux 中使用 cURL 进行 HTTP POST 和 GET [重复]

Posted

技术标签:

【中文标题】在 Linux 中使用 cURL 进行 HTTP POST 和 GET [重复]【英文标题】:HTTP POST and GET using cURL in Linux [duplicate] 【发布时间】:2013-02-05 08:51:44 【问题描述】:

我有一个在 Windows 上用 ASP.NET 编写的服务器应用程序,它提供 Web 服务。

如何在 Linux 中使用 cURL 调用 Web 服务?

【问题讨论】:

为了快速构建 curl 命令,我正在使用这个在线工具:curlbuilder.com 【参考方案1】:

*nix 提供了一个不错的小命令,让我们的生活变得更轻松。

获取:

使用 JSON:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://hostname/resource

使用 XML:

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://hostname/resource

发布:

用于发布数据:

curl --data "param1=value1&param2=value2" http://hostname/resource

文件上传:

curl --form "fileupload=@filename.txt" http://hostname/resource

RESTful HTTP 发布:

curl -X POST -d @filename http://hostname/resource

用于登录网站(身份验证):

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

漂亮地打印卷曲结果:

对于 JSON:

如果你使用npmnodejs,你可以通过运行这个命令来安装json包:

npm install -g json

用法:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://hostname/resource | json

如果你使用pippython,你可以通过运行这个命令来安装pjson包:

pip install pjson

用法:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://hostname/resource | pjson

如果你使用 Python 2.6+,json 工具是捆绑在里面的。

用法:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://hostname/resource | python -m json.tool

如果你使用gemruby,你可以通过运行这个命令来安装colorful_json包:

gem install colorful_json

用法:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://hostname/resource | cjson

如果你使用apt-get(你的Linux发行版的aptitude包管理器),你可以通过运行这个命令来安装yajl-tools包:

sudo apt-get install yajl-tools

用法:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://hostname/resource |  json_reformat

对于 XML:

如果您在 Debian/Gnome 环境中使用 *nix,请安装 libxml2-utils:

sudo apt-get install libxml2-utils

用法:

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://hostname/resource | xmllint --format -

或安装tidy:

sudo apt-get install tidy

用法:

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://hostname/resource | tidy -xml -i -

将 curl 响应保存到文件中

curl http://hostname/resource >> /path/to/your/file

curl http://hostname/resource -o /path/to/your/file

curl命令的详细说明,点击:

man curl

有关 curl 命令的选项/开关的详细信息,请点击:

curl -h

【讨论】:

如果你重定向到less,你可能需要add -sS 我怎样才能得到响应放入另一个命令行? @emoleumassi 在你之前看到 x-yuri 的评论;您应该能够将返回值通过管道传输到另一个命令中,例如 less 可能比下面的 grep 方法更好的方法是将结果通过管道传输到 jq。 get 示例中,您可以引用整个 url 以避免参数错误,例如curl "http://www.virustotal.com/vtapi/v2/ip-address/report?ip=8.8.8.8&apikey=1233456890"【参考方案2】:

我认为 Amith Koujalgi 是正确的,但如果 Web 服务响应采用 JSON 格式,那么以干净的 JSON 格式而不是很长的字符串查看结果可能更有用。只需添加 | grep | python -mjson.tool 以 curl 命令结尾这里有两个例子:

带有 JSON 结果的 GET 方法

curl -i -H "Accept: application/json" http://someHostName/someEndpoint | grep | python -mjson.tool 

带有 JSON 结果的 POST 方法

curl -X POST  -H "Accept: Application/json" -H "Content-Type: application/json" http://someHostName/someEndpoint -d '"id":"IDVALUE","name":"Mike"' | grep | python -mjson.tool

【讨论】:

grep 应该在这里做什么?我使用以下结果相同:curl -s -H "Accept: application/json" -H "Content-Type: application/json" -H "http://$API_BASE_URL$1" | python -mjson.tool

以上是关于在 Linux 中使用 cURL 进行 HTTP POST 和 GET [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Linux curl 命令模拟 POST/GET 请求

linux之http命令行工具curl

如何在不使用 CURL 的情况下运行 HTTP 请求

Linux系统中的curl命令使用教程

简单备忘一下Linux下的wget和curl如何使用http proxy

Linux Curl常用命令使用