Linux 下curl命令post传递表单数据

本文将会讲述如何在linux或者unix系统下使用cURL工具或者命令在命令行下发送post请求传递数据。 比如上传一个文件到远程的服务器的特定目录下。如何通过cURL 命令在linux命令行下创建一个post请求来上传文件。
CURL是一个可以用来从本地传递数据请求到远程服务器的非常好用的工具,可以通过多种协议(http,https,ftp等)从远程web服务器上上传或者下载所需要的文件。 可以通过cURL工具来创建post或者get 请求来创建请求或者测试不同的请求操作。

cRURL 命令post传递参数给相应表单字段

当我们只是需要传递相应的值给表单里的特定字段,我们可以使用cURL命令的–data 或者-d选项,命令格式如下:

curl -d "key=value1&key2=value2" "url"

或者

curl --data "key=value1&key2=value2" "url"

对于上述命令,如果只是通过curl post请求传递一个参数值,那么可以不适用双引号,如果是两个以上的参数就必须使用双引号扩起来。
下面我们来看一个实例:
假如我们想向一个登陆页面传递用户名和密码数据,那么我们来看看如何创建cURL post请求来发送数据。
登陆表单的数据如下:

<form  action="login" method="post">
<input type="text"  name="username"  value="user1"/>
<input type="password"  name="password"  value="123"/>
<button type="submit"  value="登陆" />
</form>

那么可以在linux命令行下执行下面的cURL命令创建一个post请求来传递相应的字段值给表单:

curl -d "username=user1&password=123" "www.test.com/login"

如果需要跟踪做了重定向的表单网页,那么需要使用-L 选项,命令如下:

curl -L -d "username=user1&password=123" "www.test.com/login"

cURL保存当前的cookie数据

如果当前已经进行了登录操作,那么可能我们需要保存下当前已经生产的cookie数据,供其它的请求操作来使用,使用curl命令以及-c 选项进行保存当前的cookie信息:

curl -c cookie -d "username=user1&password=123" "www.test.com/login"

命令执行完成后,会在当前目录下生产一个包含cookie信息的文件。
如果需要使用已有的cookie文件来进行post请求操作,那么需要使用curl 的-b选项,执行命令如下:

curl -L -b cookie -d "key3=value3" "url"

通过cURL命令上传文件

如果需要通过cURL 工具上传某个文件到相应表单,可以使用-F 选项,命令格式如下:

curl -F "data=@filename" "url"

例如你想上传一个文件到远程的服务器表单(http://www.test.com/upload),接收文件的表单参数名为img,那么我们可以执行下面的命令:

curl -F “img=@linux.gif" "http://www.test.com/upload"

如果要同时上传多个文件,可以执行下面的命令:

curl -F "img1=@linux1.gif" -F "img2=@linux2.gif" "http://www.test.com/upload"

PHP中通过cURL建立post请求获取数据

因为PHP支持curl中的库,所有可以在php中模拟curl的post请求来抓取到想要的数据。 下面我们通过curl post方式来打开特定页面并获取页面数据,代码如下:

$url = "http://localhost/test.php";
//curl post请求所需要传递的参数值
$post_data = array ("username" => "user1","key" => "test");
$ch = curl_init(); // curl post 请求操作初始化
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// post数据
curl_setopt($ch, CURLOPT_POST, 1);// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
print_r($output); //打印抓取到的页面数据

通过上面的php程序返回的数据是json格式。
更多关于curl的用法可以参看帮助文档,执行下面命令:

$ man curl

99%的人还阅读了:
Linux:用腻了 wget 或 curl,有什么更好的替代品吗?
Mac OS:终端下使用curl命令下载文件
Ubuntu 下curl安装及使用指南

Leave a Reply