转载自: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. 理解Linux中的shutdown、poweroff、halt和reboot命令

    原文  http://os.51cto.com/art/201706/541525.htm   在本篇中,我们会向你解释 shutdown.poweroff.halt 以及 reboot 命令.我们会 ...

  2. Linux yum源完全配置

    一.简介 yum主要功能是更方便的添加/删除/更新RPM包,自动解决包的依赖性问题,便于管理大量系统的更新问题,其理念是使用一个中心仓库(repository)管理一部分甚至一个distributio ...

  3. js的回调函数详解

    本文主要介绍了个人对于javascript中回调函数的理解和使用方法及示例,需要的朋友可以参考下   现在做native App  和Web App是主流,也就是说现在各种基于浏览器的web app框 ...

  4. nginx默认配置和默认站点启动

    1.nginx的配置文件nginx.conf cd /etc/nginx/ vim nginx.conf 打开后的文件为: user nginx;worker_processes 1; error_l ...

  5. Atom打开txt文件中文乱码解决、指定文件的语法格式、win10中禁止睡眠

    1.Atom中文乱码解决 首先保证打开的txt文件的编码格式为UTF-8无BOM编码格式,可以使用Notepad++更改,如下图所示: 然后再在atom中打开文件,并右键点击文件内容的任意位置,Cha ...

  6. SD-WAN介绍

    SD-WAN SD-WAN特性 相关技术 Hybrid WAN WAN Optimization WAN edge router MPLS NFV SDN SD-WAN厂商 SD-WAN SD-WAN ...

  7. iOS.CodeSign

    Inside Code Signing 1. Code Signing需要的基础组件: 证书,私钥 As an iOS developer, chances are you have a certif ...

  8. Python.tornado.2.tornado.options

    记录Tornado-4.0.2源码的阅读,学习,分析 options.py 1. imports 部分 1.1 __future__ from __future__ import absolute_i ...

  9. iOS.KVC.setValue:forKey:

    Foundation Framework 定义了 NSObject(NSKeyValueCoding), - (void)setValue:(id)value forKey:(NSString *)k ...

  10. LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图

    #6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...