curl的常见用法小结

本文总结了curl命令的常见用法,包括模拟POST请求、保存和使用cookie、文件上传以及查看请求过程等。重点介绍了如何传递JSON参数、处理重定向、上传多文件及组合使用-F和-d选项。

【常用命令】模拟post请求,发送json格式的参数

curl -H "Content-Type:application/json" -X POST --data '{"message": "sunshine"}' http://localhost:8000/

这种方法是json数据直接在body里面的。

1、首先,最简单的情况是我们只需要提交一个不带文件上传的表单,这种情况下,只需要在curl中使用–data(注意是–不是-)或者它的缩写-d即可。

curl -d "key=value&key=value" "url" 或者 curl --data "key=value&key=value" "url"

(注意:如果键值对只有一个的话,可以不写双引号,但是如果有多个键值对,必须加上双引号,键值对之间用&连接)这种参数形式类似于Form表单。

如果我们有下面一个表单:

<form action="doLogin" method="post"> <input type="text" name="username" value="admin"/> <input type="password" name="password" value="admin"/> <button type="submit" value="submit" /> </form>

<form action="doLogin" method="post"> 
<input type="text" name="username" value="admin"/> 
<input type="password" name="password" value="admin"/> 
<button type="submit" value="submit" /> 
</form>

那么我们的curl命令就会如下:

curl -d "username=admin&password=admin" "www.xxxx.com/doLogin"

如果登陆后网页被重定向,而我们想追踪这个重定向的话可以加上-L参数(L必须大写),表示追踪重定向【没用过】

curl -L -d "username=admin&password=admin" "www.xxx.com/doLogin"

2、稍微复杂的情况:现在我们希望进行一些必须在登陆前提下的post请求,那就需要先保存我们之前的成功登陆的cookie信息,然后再携带登陆信息进行post请求。

2.1、保存登陆cookie信息到文件可以通过以下2个选项中的任意一个实现

-c:保存cookie信息

-D:保存整个header信息,包括cookie

如:

curl -c cookie.txt -d "username=admin&password=admin" "www.xxx.com/doLogin"

运行后会在你执行指令的目录下生成一个cookie.txt文件,当然你也可以指定该文件的创建路径,相对路径绝对路径皆可(如cookie.txt可以改成 /path/cookie.txt),携带登陆信息进行post请求需要使用-b选项 -b:指定使用哪个文件

例如:

curl -L -b cookie.txt -d "key=value" "url"

3、模拟表单文件上传,相当于form表单中method=”POST”和enctype=”multipart/form-data”的情况

这个时候就需要用到-F选项了 :

curl -F "key=@value" "url"

假目前我们的文件上传表单是这样的:

<form action="upload" method="post" enctype="multipart/form-data"> 
<input type="file" name="myfile" /> 
<button type="submit" value="submit" /> 
</form>

我们想提交一个名为hellocurl.zip的文件,该文件在我们指令所在的根目录下。

则命令如下:

curl -F "myfile=@hellocurl.zip" "www.xxx.com/upload"

如果上传的文件不止一个,可以写多个-F “key=@value”

curl -F "myfile1=@hellocurl1.zip" -F "myfile2=@hellocurl2.zip" "www.xxx.com/upload"

4、在上传文件的同时,需要上传一些Form表单的参数比如说下面表单

<form action="upload" method="post" enctype="multipart/form-data"> 
<span style="color:#990000;">
<input type="text" name="filename" value="hellocurl"/>
</span> 
<input type="file" name="myfile" /> 
<button type="submit" value="submit" /> 
</form>

这时候我们可能会想到加上 -d 但是,特别注意,这个时候我们不能同时使用-d 和-F,这2个选项在curl中是两种方式的请求,-d 为application/x-www-url-encoded方式发送post请求,而-F为multipart/form-data方式,如果在一次curl中同时使用-d和-F选项会报Warning: You can only select one HTTP request!的警告,导致指令无法执行。这种情况下,现在网上很多给出的解决方案是通过增加-F的方式来解决。

curl -F "filename=hellocurl" -F "myfile2=@hellocurl2.zip" "www.xxx.com/upload"

如果我们有多个参数,此时需要些多个-F,而不能使用&连接符放在一个-F中

如:curl -F "filename=hellocurl" -F "key=value" -F "myfile2=@hellocurl2.zip" "www.xxx.com/upload"

5、其他一些实用选项: -v:查看请求的整个完整的过程 -i:查看请求头信息 -o:保存响应结果到指定路径的文件中,如: curl -o tmp.txt http://www.csdn.net #保存响应到tmp.txt

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值