精华内容
下载资源
问答
  • curl 模拟 GET\POST 请求,以及 curl post 上传文件

    万次阅读 多人点赞 2018-06-15 11:41:45
    curl 模拟 GET\POST 请求,以及 curl post 上传文件 一般情况下,我们调试数据接口,都会使用一个 postman 的工具,但是这个工具还是有点大了。事实上,我们在调试一些小功能的时候,完全没有必要使用它。在命令行...

    curl 模拟 GET\POST 请求,以及 curl post 上传文件

    一般情况下,我们调试数据接口,都会使用一个 postman 的工具,但是这个工具还是有点大了。事实上,我们在调试一些小功能的时候,完全没有必要使用它。在命令行中,我们使用 curl 这个工具,完全可以满足我们轻量的调试要求。

    下面,我们来简单的说一下,curl 的一些常见使用方法:

    curl GET 请求

    curl命令 + 请求接口的地址。

    curl localhost:9999/api/daizhige/article
    

    如上,我们就可以请求到我们的数据了,如果想看到详细的请求信息,我们可以加上 -v 参数

    curl localhost:9999/api/daizhige/article -v
    

    操作结果如下图所示:

    curl get 请求

    curl POST 请求

    我们可以用 -X POST 来申明我们的请求方法,用 -d 参数,来传送我们的参数。

    所以,我们可以用 -X PUT-X DELETE 来指定另外的请求方法。

    curl localhost:9999/api/daizhige/article -X POST -d "title=comewords&content=articleContent"
    

    如上,这就是一个普通的 post 请求。

    但是,一般我们的接口都是 json 格式的,这也没有问题。我们可以用 -H 参数来申明请求的 header

    curl localhost:9999/api/daizhige/article -X POST -H "Content-Type:application/json" -d '{"title":"comewords","content":"articleContent"}'
    

    so, 我们可以用 -H 来设置更多的 header 比如,用户的 token 之类的。

    同样,我们可以用 -v 来查看详情。

    curl POST 请求

    curl POST 上传文件

    上面的两种请求,都是只传输字符串,我们在测试上传接口的时候,会要求传输文件,其实这个对于 curl 来说,也是小菜一碟。

    我们用 -F "file=@__FILE_PATH__" 的请示,传输文件即可。命令如下:

    curl localhost:8000/api/v1/upimg -F "file=@/Users/fungleo/Downloads/401.png" -H "token: 222" -v
    

    执行结果如下图所示:

    curl POST 上传文件

    更多 curl 的使用方法,以及参数说明,可以在系统中输入 man curl 来进行查看。或者,点击 curl man 查看网页版的介绍。

    所以,我们可以用 man 命令名称 来查看更多的工具的介绍。当然,一些非主流的命令行工具,应该是没有相关的介绍的。

    可能你会感觉用这些命令才进行操作,感觉破烦。但是,当你仅仅需要请求一个接口,进行一个轻量的操作的时候,是顺手在终端中输入一个命令来得方便,还是打开一个重型的图形工具来得方便呢?

    命令行是可以保存历史记录的,我们使用 ctrl+r 快捷键可以进行历史命令搜索,这样,我们可以非常方便的重复进行命令调试。

    我现在已经养成了在终端中写代码,跑代码,以及调试代码的习惯,我感觉这样非常方便。

    当然,我的想法不一定是正确的,但是依然希望,能够对看官有所帮助。

    本文由 FungLeo 原创,允许转载,但转载必须保留首发链接。


    2020年04月27日补充

    我没想到这篇博文有这么大的阅读量。文中所表述的 curl 的使用虽然关键点都已经涉及到了,但是如何更加优雅的使用,并没有涉及。如果你对这部分内容感兴趣,可以阅读我的这篇博文 《linux 或 mac 命令行更优雅的使用 curl 命令,以及命令行常用的快捷键说明》,相信各位看官在看过这篇文章之后,对于 curl 命令的使用,会更加的舒服、优雅哦!

    展开全文
  • POST 下载文件

    千次阅读 2018-12-28 13:43:59
    需求背景 这段时间遇到个需求,需要...请求方式基本可以确定只能用POST了,而直接用Ajax发POST请求是不行的。经过一番调研,总结两种方案: 可以后台接到请求后生成下载文件,放到静态文件目录,然后返回文件...

    需求背景

    遇到个需求,需要根据用户输入的id列表下载文件。一般情况下,下载文件用GET请求就能满足需求,但是,这个需求的请求参数中可能有上千个id,GET请求很可能超出浏览器参数长度限制。那么该怎么解决这个问题呢?

    解决方案

    请求方式基本可以确定只能用POST了,而直接用Ajax发POST请求是不行的。经过一番调研,总结两种方案:

    1. 可以后台接到请求后生成下载文件,放到静态文件目录,然后返回文件路径,前端拿到路径后用GET请求拉取文件。此方案可行,但是我们的静态文件都在亚马逊服务器上,还要把文件上传到亚马逊服务器,然后前端去亚马逊服务器拉取文件,总感觉绕个弯怪怪的。所以有了下边的方案2;
    2. 客户端使用POST表单提交请求,不要用Ajax。示例代码如下:
          <!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
          <title>下载文件示例程序</title>
      </head>
      <body>
      <button  onclick="downloadExcel()">下载</button>
      <script type="text/javascript">
      
          function downloadExcel(){
              download("http://localhost:8080/download", {"ids": "10000,10002"});
          }
      
          /**
           * post方式下载文件
           * @param  {[string]} url  接口
           * @param  {[json]} data 数据
           * @return 
           */
          function download(url, data){
               var body = document.getElementsByTagName('body')[0];
              var form = document.createElement('form');
              form.method = 'POST';
              form.action = url;
              for(key in data){
                  var param = document.createElement('input');
                  param.type = "hidden";
                  param.name = key;
                  param.value = data[key];
                  form.appendChild(param);
              }
              body.appendChild(form);
              form.submit();
              body.removeChild(form);
         }
      </script>
      </body>
      </html>
      

    亲测兼容老IE,而且页面无刷新,问题解决。

    备注

    本人主后台,非专业前端,前端代码写的不好,仅供参考。

    展开全文
  • 除了发送的文件主体之外,还能附加一些其他参数,例如本例中图片文件是主体,然后另外加了一个token参数,值为方法参数token,其他参数以此类推。 public static string HttpPost(string url, string filepath, ...

    除了发送的文件主体之外,还能附加一些其他参数,例如本例中图片文件是主体,然后另外加了一个token参数,值为方法参数token,其他参数以此类推。

    public static string HttpPost(string url, string filepath, string filename, string token)
    {   
        string strResult;      
        try      
        {        
            FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);        
            byte[] bytebuffer;        
            bytebuffer = new byte[fs.Length];        
            fs.Read(bytebuffer, 0, (int) fs.Length);        
            fs.Close();              
            string boundary = DateTime.Now.Ticks.ToString("X");        
            string Enter = "\r\n";        
            string strContent1 = "--" + boundary + Enter + "Content-Type: application/octet-stream" + Enter + "Content-Disposition: form-data; filename=\"" + "" + filename + "" + "\"; name=\"file\"" + Enter + Enter;        
            string strContent2 = Enter + "--" + boundary + Enter + "Content-Type: text/plain" + Enter + "Content-Disposition: form-data; name=\"token\"" + Enter + Enter + "" + token + "" + Enter + "--" + boundary + "--";        
            byte[] strContentByte1 = Encoding.UTF8.GetBytes(strContentByte1);
            byte[] strContentByte2 = Encoding.UTF8.GetBytes(strContentByte2);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "multipart/form-data;boundary=" + boundary;
            Stream myRequestStream = request.GetRequestStream();
            myRequestStream.Write(strContentByte1, 0,strContentByte1.Length);
            myRequestStream.Write(bytebuffer, 0, bytebuffer.Length);
            myRequestStream.Write(strContentByte2, 0, strContentByte2.Length);       
            HttpWebResponse response = (HttpWebResponse) request.GetResponse();        
            Stream streamReceive = response.GetResponseStream();        
            Encoding encoding = Encoding.UTF8;        
            StreamReader streamReader = new StreamReader(streamReceive, encoding);        
            strResult = streamReader.ReadToEnd();        
            streamReceive.Dispose();        
            streamReader.Dispose();        
            return strResult;      
        }      
        catch(Exception ex)      
        {        
            return ex.Message;
        }      
        return strResult;    
    }

    展开全文
  • java后台发起上传文件post请求(http和https)

    万次阅读 多人点赞 2019-07-31 19:11:04
    对于文件上传,客户端通常就是页面,在页面里实现上传文件不是什么难事,写个form,加上enctype="multipart/form-data",在写个接收的就可以了,没什么难的。如: <!DOCTYPEhtml> <html> <head> ...

    一、http post

    对于文件上传,客户端通常就是页面,在页面里实现上传文件不是什么难事,写个form,加上enctype = "multipart/form-data",在写个接收的就可以了,没什么难的。如:

    1. <!DOCTYPE html>  
    2. <html>  
    3. <head>  
    4. <title>Hello World!</title>  
    5. </head>  
    6. <body>  
    7.     <form method="POST" enctype="multipart/form-data" action="/XXX">   
    8.            <p>文件1:<input type="file" name="file1" /></p>  
    9.            <p>文件:<input type="file" name="file" /></p>  
    10.            <p>其他信息:<input name="luid" /></p>  
    11.            <p><input type="submit" value="上传" /></p>  
    12.     </form>
    13. </body>  
    14. </html>  

     

    如果要用java.net.HttpURLConnection来实现文件上传,还真有点搞头,实现思路和具体步骤就是模拟页面的请求,页面发出的格式如下:

    1. -----------------------------7da2e536604c8  
    2. Content-Disposition: form-data; name="luid"  
    3.   
    4. 123  
    5. -----------------------------7da2e536604c8  
    6. Content-Disposition: form-data; name="file1"; filename="D:\haha.txt"  
    7. Content-Type: text/plain  
    8.   
    9. haha  
    10.   hahaha  
    11. -----------------------------7da2e536604c8  
    12. Content-Disposition: form-data; name="file"; filename="D:\huhu.png"  
    13. Content-Type: application/octet-stream  
    14.   
    15. 这里是图片的二进制数据 
    16. -----------------------------7da2e536604c8--

    上面username是form表单中的文本参数,值为123,file1是form表单中上传的文本文件。file是form表单中上传的其他类型的文件,他们的Content-Type不一样。

    知道了这些,就可以编写代码来模拟了,这里只上传一个文件file,是张图片,附上代码的截图:

     

    以上的空行"\r\n"是比较严格的,要换行或者换两行,都是根据格式来的。

     

    二、https post

    一般都是http的请求,但现在也有越来越多的外部接口采用https的方式来调用。比如这次工作中需要调用的FaceId他们的身份证识别接口,这个接口就是https的,而且传递的参数里还需要身份证照片,这明显是个文件。如下:

     

     

    java后台发起https的文件上传请求的原理以及整个步骤和http的基本一致,只是这次的URLConnection是HttpsURLConnection,而且由于https的请求需要签名等安全认证,所以会在设置HttpsURLConnection时需要多设置两个属性,如下的setSSLSocketFactory()和setHostnameVerifier():

    所需要的TrustAnyTrustManager类和TrustAnyHostnameVerifier类代码如下:

    其他的代码就和HttpURLConnection的一样了。

     

    以上的代码都是使用JDK自带的net工具类,然后模拟页面的form发出的请求来完成的,如果想使用HttpClient来完成发送请求也是可以的,并且更加简单明了,不需要自己写模拟的步骤。因为是第三方工具包,需引入对应jar包:

    <dependency> 

             <groupId>org.apache.httpcomponents</groupId> 

              <artifactId>httpclient</artifactId> 

             <version>4.5.2</version>         

    </dependency> 

    <dependency> 

             <groupId>org.apache.httpcomponents</groupId> 

              <artifactId>httpmime</artifactId> 

             <version>4.5.2</version>         

      </dependency>

    编写的代码如下:

    以上代码都是经过测试的测试代码,你可以自己封装好以供自己今后使用(ps:别想复制,代码都是图片,因为我在沙盒内,代码复制不出来0.0)!

    展开全文
  • POST上传文件

    千次阅读 2018-11-13 10:13:03
    POST上传文件 最早的HTTP POST是不支持文件上传的,给编程开发带来很多问题。但是在1995年,ietf出台了rfc1867,也就是《RFC 1867 -Form-based File Upload in HTML》,用以支持文件上传。所以Content-Type的类...
  • c# post 接收来的文件

    千次阅读 2019-03-30 19:17:00
    得到input标签中的file文件路径; string lstrFileType = string .Empty; string lstrContentType = string .Empty; if (lintTemp!=- 1 &&files[ 0 ].FileName.Length>lintTemp+ 1 ) { lstrFileType ...
  • Postman Post请求上传文件

    万次阅读 多人点赞 2018-06-01 14:36:48
    Postman Post请求上传文件一、选择post请求方式二、填写HeadersKey:Content-TypeValue:multipart/form-data[{"key":"Content-Type","value":"multipart/form-data","...
  • 1、开发APP接口,post文件 2、同一文件提交给多个接口 3、选择已有的图片二次提交审核 我的使用场景就是同一文件提交给多个接口。我先提交给自己服务器保存,然后用保存的文件提交给另一家公司进行内容审核。
  • AJAX POST方式上传文件到后台和下载后台来的文件

    万次阅读 热门讨论 2018-07-30 16:42:01
    原本ajax是不能下载文件的,原因:因为response,一般请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二...
  • java post下载文件 zip批量压缩文件

    千次阅读 2018-05-16 14:21:25
    文章借鉴:https://blog.csdn.net/zhangzeyuaaa/article/details/52823238用post请求生成from表单提交请求下载了一下前台代码: // post下载,构建from表单以post方式下载   $("#downloadform")....
  • http post 上传文件

    2010-10-18 11:03:50
    HTTP 实现文件上传 HTTP 实现文件上传 HTTP 实现文件上传 HTTP 实现文件上传 HTTP 实现文件上传 HTTP 实现文件上传 HTTP 实现文件上传HTTP 实现文件上传
  • PostScript文件

    千次阅读 2011-01-11 14:01:00
    什么是PostScript?PostScript是专门为打印图形和文字而设计的一个编程语言,它与打印的介质无关,不管您是在纸上、胶片上打印,还是在屏幕显示都适合。它是一种页面描述语言,与HTML语言类似。  Post...
  • c# .net实现后台post文件图片到服务器,里面有说明,大家可以先看一下
  • post 请求下载文件

    千次阅读 2019-11-29 11:35:43
    最近遇到一个下载的需求,由于 url 参数太长(常用的下载方法 a 标签或者 location.href 的方法都是 get 请求,get 请求参数长度有限制),无法下载,考虑了好几种方案,最终还是觉得通过 ajax 的 POST 方法进行下载,...
  • 最近开发中遇到一个需求,在post请求中,需要传递xml的参数!瞬间感觉不太好了,常规来说都是上传json的, 无奈也只能按照接口文档来做了!查阅大量资料,KissXML 这个开源框架可以完美解决该问题, 下面粘出实现代码...
  • C#Post文件上传

    千次阅读 2018-11-05 15:07:43
    上代码: 客户端代码 public static string Upload(string url, string fileName) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url... request.Method = "POST"; Stream postStream = new M...
  • HttpClient通过Post上传文件

    万次阅读 2013-04-19 19:28:07
    在之前一段的项目中,使用Java模仿Http Post方式发送参数以及文件,单纯的传递参数或者文件可以使用URLConnection进行相应的处理。  但是项目中涉及到既要传递普通参数,也要传递多个文件(不是单纯的传递XML...
  • 其实下载没什么要特别说的,之前都是用的get请求,这次不同,后台用的post请求,返回的是数据流,这种post请求下载文件的方式倒是没怎么弄过。记录一下。 接口 接口地址为: /file/download/${id} 前端请求这里...
  • ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的...ApiPost模拟Post上传文件 使用apipost可以方便的模拟Post上传,详细介绍如下 1、官方下载安装ApiPost打开 下载地址:https://www.apipost.cn/#d...
  • 2.使用Http协议Post上传文件

    万次阅读 2018-03-14 22:06:30
    后台是HttpServer 理所当然的便想到了使用Http的Post来上传文件。2.2 协议格式http协议网上说的有很多,http协议大致有三个部分:Request-Line/Respone-Line,Header,Body三个部分。虽然网上说使用Http协议的Post...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,017,132
精华内容 406,852
关键字:

post传文件