转载自:https://blog.csdn.net/freedomwjx/article/details/43278157
(注:在curl前面加上time如time curl xxx,可以在最后显示访问时间,主要看real的那一栏)
一. 首先,最简单的情况是我们只需要提交一个不带文件上传的表单,这种情况下,只需要在curl中使用--data(注意是--不是-)或者它的缩写-d即可。
  1. curl -d "key=value&key=value" "url"
    或者
  1. curl --data "key=value&key=value" "url"
    (注意:如果键值对只有一个的话,可以不写双引号,但是如果有多个键值对,必须加上双引号,键值对之间用&连接)
 
    现在假设我们有一个登陆表单,它看起来可能是这样的
  1. <form  action="doLogin" method="post">
  2. <input type="text"  name="username"  value="admin"/>
  3. <input type="password"  name="password"  value="admin"/>
  4. <button type="submit"  value="submit" />
  5. </form>
    那我们的curl就应该写成这样
  1. curl -d "username=admin&password=admin" "www.xxxx.com/doLogin"
    如果登陆后网页被重定向,而我们想追踪这个重定向的话可以加上-L参数(L必须大写),表示追踪重定向
  1. curl -L  -d "username=admin&password=admin" "www.xxx.com/doLogin"
二. 稍微复杂的情况:现在我们希望进行一些必须在登陆前提下的post请求,那就需要先保存我们之前的成功登陆的cookie信息,然后再携带登陆信息进行post请求
    1.保存登陆cookie信息到文件可以通过以下2个选项中的任意一个实现
    -c :保存cookie信息
    -D:保存整个header信息,包括cookie
    示例:
  1. curl -c cookie.txt  -d "username=admin&password=admin" "www.xxx.com/doLogin"
    运行后会在你执行指令的目录下生成一个cookie.txt文件,当然你也可以指定该文件的创建路径,相对路径绝对路径皆可(如cookie.txt可以改成 /path/cookie.txt)
 
    2.携带登陆信息进行post请求需要使用-b选项
        -b:指定使用哪个文件
        示例:
  1. curl -L -b cookie.txt -d "key=value" "url"
三. 模拟表单文件上传,相当于form表单中method="POST"和enctype="multipart/form-data"的情况
        
        这个时候就需要用到-F选项了
        curl -F "key=@value" "url"
 
        假目前我们的文件上传表单是这样的:
  1. <form  action="upload" method="post" enctype="multipart/form-data">
  2. <input type="file"  name="myfile" />
  3. <button type="submit"  value="submit" />
  4. </form>
        我们想提交一个名为hellocurl.zip的文件,该文件在我们指令所在的根目录下。
 
        那我们的curl就是这样的
  1. curl -F "myfile=@hellocurl.zip" "www.xxx.com/upload"
        如果上传的文件不止一个,可以写多个-F "key=@value"
  1. curl -F "myfile1=@hellocurl1.zip" -F "myfile2=@hellocurl2.zip" "www.xxx.com/upload"
        再来看一个更加贴近实际的情况:很多时候,我们的表单还会包含许多其他表单元素,如text,checkbox,select等等。
        
        现在我们在上面表单的基础上加入更多元素,变成下面这样:
  1. <form  action="upload" method="post" enctype="multipart/form-data">
  2. <span style="color:#990000;"><input type="text"  name="filename"  value="hellocurl"/></span>
  3. <input type="file"  name="myfile" />
  4. <button type="submit"  value="submit" />
  5. </form>
        同时我们想提交hellocurl.zip文件
 
        这时候我们可能会想到加上-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的方式来解决
 
        即:
  1. curl -F "filename=hellocurl" -F "myfile2=@hellocurl2.zip" "www.xxx.com/upload"
        但是我在一个spring mvc的项目中测试这个方法的时候发现,由于拿不到filename的值,无法绕过服务器端的验证,导致提交失败
        如果你也碰到类似的情况,可以尝试下以下解决方法:
  1. curl -F "key=@value" "www.xxx.com/upload?key1=value1&key2=value2"
        具体到当前的问题我们的curl就是:
  1. curl -F "myfile2=@hellocurl2.zip" "www.xxx.com/upload?filename=hellocurl"
        该方法亲测通过,并且仍然是post的提交方式。
 
        其他一些实用选项:
        -v:查看请求的整个完整的过程
        -i:查看请求头信息

-o:保存响应结果到指定路径的文件中,如: curl -o tmp.txt http://www.csdn.net   #保存响应到tmp.txt

CURL模拟表单post提交及相关常用参数的使用(包括提交表单同时上传文件)的更多相关文章

  1. 关于php上传文件过大的表单回填

    也许标题有点绕口,有点无法让人理解.请原谅博主,语文学的不好,都赖体育老师. 问题场景重现:在某次迭代中,接到这样一个需求:当新建或编辑一个Bug(包含附件以及其他字段)上传附件过大时,退回到编辑页面 ...

  2. c# 模拟表单提交,post form 上传文件、大数据内容

    表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...

  3. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  4. java 模拟表单方式提交上传文件

    /** * 模拟form表单的形式 ,上传文件 以输出流的形式把文件写入到url中,然后用输入流来获取url的响应 * * @param url 请求地址 form表单url地址 * @param f ...

  5. c# 模拟表单提交,post form 上传文件、数据内容

    转自:https://www.cnblogs.com/DoNetCShap/p/10696277.html 表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipar ...

  6. 使用CURL模拟表单上传文件

    //以下代码适合PHP7.x PHP5.6$file = new CURLFile('./127.zip','application/octet-stream');$file->setMimeT ...

  7. Linux 基础命令-CURL 表单上传文件

    CURL -F, --form <name=content> (HTTP) This lets curl emulate a filled-in form in which a user ...

  8. 4 django系列之HTML通过form标签来同时提交表单内容与上传文件

    preface 我们知道提交表单有2种方式,一种直接通过submit页面刷新方法来提交,另一种通过ajax异步局部刷新的方法提交,上回我们说了通过ajax来提交文件到后台,现在说说通过submit来提 ...

  9. tp中附件上传文件,表单提交

    public function tianjia(){ $goods=D('Goods'); if(!empty($_POST)){ if($_FILES['f_goods_image']['error ...

随机推荐

  1. python颜色及背景

    linux终端中的颜色是用转义序列控制的,转义序列是以ESC开头,可以用\033完成相同的工作(ESC的ASCII码用十进制表示就是27,等于用八进制表示的33). 书写格式,和相关说明如下: 1 2 ...

  2. java中钩子方法的概念

    钩子方法源于设计模式中模板方法(Template Method)模式,模板方法模式的概念为:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新 ...

  3. 运行PL-SVO(单目)

    代码:https://github.com/rubengooj/pl-svo 1.Prerequisites and dependencies (1)SVO 安装SVO,with ROS:https: ...

  4. Hadoop集群配置(最全面总结 )(转)

    Hadoop集群配置(最全面总结) huangguisu 通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker.这些机器是masters.余下的机器即作为Da ...

  5. Linux系统安装过程

    一.安装VMware® Workstation 14 Pro,有一些安装时会出现virtual XT的错误,这需要重启电脑进入BIOS,开户虚拟加速开关:有些win8/10会出现虚拟网卡安装失败的情况 ...

  6. 虚拟机vmware centos7 扩展磁盘空间

    0.思路 创建一个新的逻辑分区,将新的逻辑分区格式化ext3(或其他类型)的文件系统,mount到磁盘空间不够的文件系统,就跟原来的分区/文件系统一样的使用 1.准备 1.1 注意使用VMware自带 ...

  7. javascript 高级程序设计 四

    新的一天开始,让我们伴随者轻快的心情,开始今天的笔记 1.操作符: (1): *./.-在ECMAScript中操作的时候,如果遇到有一个操作值不是数值型(Number),那么就会在后台调用numbe ...

  8. BZOJ1088或洛谷2327 [SCOI2005]扫雷

    BZOJ原题链接 洛谷原题链接 很容易发现答案就只有\(0,1,2\)三种答案,而且只要知道第一个格子是否有雷就可以直接顺推下去了. 所以我们跑一次首位有雷,跑一次首位无雷判断是否可行即可. #inc ...

  9. python提取百度经验<标题,发布时间,平均流量,总流量,具体的链接>

    之前想研究下怎么抓网页数据.然后就有了下面的练习了. 如有BUG.也纯属正常. 只是练习.请勿投入产品使用. #!/usr/bin/python # -*- coding: utf-8 -*- #Fi ...

  10. 如果CocoaPods 导入的库需要修改代码

      如果经常要修改第三方框架的话,可以将需要修改的第三方库fork一份到自己的github,在里面做完修改之后,将podfile修改为: platform :ios, '7.0' pod '要导入的库 ...