原文:http://www.cnblogs.com/zhangfei/p/5099036.html

HTTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提交请求与RAW请求,下面我将结合HttpClient来实现一下这三种形式:

一.GET请求: GET请求时,参数一般是写在链接上的,代码如下:

  1. public void get(String url){
  2. CloseableHttpClient httpClient = null;
  3. HttpGet httpGet = null;
  4. try {
  5. httpClient = HttpClients.createDefault();
  6. RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).build();
  7. httpGet = new HttpGet(url);
  8. httpGet.setConfig(requestConfig);
  9. CloseableHttpResponse response = httpClient.execute(httpGet);
  10. HttpEntity httpEntity = response.getEntity();
  11. System.out.println(EntityUtils.toString(httpEntity,"utf-8"));
  12. } catch (ClientProtocolException e) {
  13. e.printStackTrace();
  14. } catch (IOException e) {
  15. e.printStackTrace();
  16. }finally{
  17. try {
  18. if(httpGet!=null){
  19. httpGet.releaseConnection();
  20. }
  21. if(httpClient!=null){
  22. httpClient.close();
  23. }
  24. } catch (IOException e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }

如果想把参数不写在链接上,单独的传进去,则可以这样:

  1. public void get(String url, Map<String, String> params){
  2. CloseableHttpClient httpClient = null;
  3. HttpGet httpGet = null;
  4. try {
  5. httpClient = HttpClients.createDefault();
  6. RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).build();
  7. String ps = "";
  8. for (String pKey : params.keySet()) {
  9. if(!"".equals(ps)){
  10. ps = ps + "&";
  11. }
  12. ps = pKey+"="+params.get(pKey);
  13. }
  14. if(!"".equals(ps)){
  15. url = url + "?" + ps;
  16. }
  17. httpGet = new HttpGet(url);
  18. httpGet.setConfig(requestConfig);
  19. CloseableHttpResponse response = httpClient.execute(httpGet);
  20. HttpEntity httpEntity = response.getEntity();
  21. System.out.println(EntityUtils.toString(httpEntity,"utf-8"));
  22. } catch (ClientProtocolException e) {
  23. e.printStackTrace();
  24. } catch (IOException e) {
  25. e.printStackTrace();
  26. }finally{
  27. try {
  28. if(httpGet!=null){
  29. httpGet.releaseConnection();
  30. }
  31. if(httpClient!=null){
  32. httpClient.close();
  33. }
  34. } catch (IOException e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. }

二. POST请求的表单提交方式,代码如下:

  1. public void post(String url, Map<String, String> params){
  2. CloseableHttpClient httpClient = null;
  3. HttpPost httpPost = null;
  4. try {
  5. httpClient = HttpClients.createDefault();
  6. RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).build();
  7. httpPost = new HttpPost(url);
  8. httpPost.setConfig(requestConfig);
  9. List<NameValuePair> ps = new ArrayList<NameValuePair>();
  10. for (String pKey : params.keySet()) {
  11. ps.add(new BasicNameValuePair(pKey, params.get(pKey)));
  12. }
  13. httpPost.setEntity(new UrlEncodedFormEntity(ps));
  14. CloseableHttpResponse response = httpClient.execute(httpPost);
  15. HttpEntity httpEntity = response.getEntity();
  16. System.out.println(EntityUtils.toString(httpEntity,"utf-8"));
  17. } catch (ClientProtocolException e) {
  18. e.printStackTrace();
  19. } catch (IOException e) {
  20. e.printStackTrace();
  21. }finally{
  22. try {
  23. if(httpPost!=null){
  24. httpPost.releaseConnection();
  25. }
  26. if(httpClient!=null){
  27. httpClient.close();
  28. }
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. }

三. POST请求的RAW参数传递:

  1. public void post(String url, String body){
  2. CloseableHttpClient httpClient = null;
  3. HttpPost httpPost = null;
  4. try {
  5. httpClient = HttpClients.createDefault();
  6. RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).build();
  7. httpPost = new HttpPost(url);
  8. httpPost.setConfig(requestConfig);
  9. httpPost.setEntity(new StringEntity(body));
  10. CloseableHttpResponse response = httpClient.execute(httpPost);
  11. HttpEntity httpEntity = response.getEntity();
  12. System.out.println(EntityUtils.toString(httpEntity,"utf-8"));
  13. } catch (ClientProtocolException e) {
  14. e.printStackTrace();
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }finally{
  18. try {
  19. if(httpPost!=null){
  20. httpPost.releaseConnection();
  21. }
  22. if(httpClient!=null){
  23. httpClient.close();
  24. }
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }

【转】HTTP协议两种提交参数的方式Form-data和raw的更多相关文章

  1. 【Spark篇】---Spark中yarn模式两种提交任务方式

    一.前述 Spark可以和Yarn整合,将Application提交到Yarn上运行,和StandAlone提交模式一样,Yarn也有两种提交任务的方式. 二.具体      1.yarn-clien ...

  2. html表单中的input元素的两种提交方式比较(get/post)

    Http存在两种最常用的提交方式:Get和Post(电话面试有问到两种提交方式的区别) 什么是HTTP? 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信. HTTP 的工作方式是客 ...

  3. 【Spark篇】--Spark中Standalone的两种提交模式

    一.前述 Spark中Standalone有两种提交模式,一个是Standalone-client模式,一个是Standalone-master模式. 二.具体         1.Standalon ...

  4. Spark剖析-宽依赖与窄依赖、基于yarn的两种提交模式、sparkcontext原理剖析

    Spark剖析-宽依赖与窄依赖.基于yarn的两种提交模式.sparkcontext原理剖析 一.宽依赖与窄依赖 二.基于yarn的两种提交模式深度剖析 2.1 Standalne-client 2. ...

  5. form表单中get和post两种提交方式的区别

    一.form表单中get和post两种提交方式的区别? 1.get提交表单中的内容在链接处是可见的.post不可见 2.post相比于get是安全的 3.post不收限制大小,get有限制大小(黑马视 ...

  6. C# 如何通过mailto标签和SMTP协议两种方式发送邮件

    本文主要讲解如何通过如现mailto标签和SMTP协议两种方式发送邮件,下面就直入主题 方法一.通过mailto标签发送邮件 通过mailto不是正真意义上的发送邮件,它只是会自动调用我们本地默认的邮 ...

  7. 小记--------spark的两种提交模式

    spark的两种提交模式:yarn-cluster . yarn-client 图解

  8. Spring两种实现AOP的方式

    有两种实现AOP的方式:xml配置文件的方式和注解的形式 我们知道通知Advice是指对拦截到的方法做什么事,可以细分为 前置通知:方法执行之前执行的行为. 后置通知:方法执行之后执行的行为. 异常通 ...

  9. OC中两种单例实现方式

    OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...

随机推荐

  1. 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)

    原文:乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabc ...

  2. 写你自己struts1框架

    前言 文本 它们的定义Struts1 commons-digester.jar解析XML 实现XML标签到对象的转换 1.依据目标XML的结构定义解析规则文件 參照rule.xml 2.创建集合对象接 ...

  3. 未能加载文件或程序集“Common”或它的某一个依赖项。试图加载格式不正确的程序

    原因:操作系统是64位的,但发布的程序引用了一些32位的ddl,所以出现了兼容性的问题解决方案一:如果是64位机器,IIS——应用程序池——高级设置——启用32位应用程序 :true.解决方案二:修改 ...

  4. ASP.NET自定义控件组件开发 第五章 模板控件开发

    原文:ASP.NET自定义控件组件开发 第五章 模板控件开发 第五章 模板控件开发 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接 ...

  5. cassandra 服务启动流程

    cassandra 服务启动流程 1.  setup 1)   CassandraDaemon ->main publicstaticvoidmain(String[]args) { insta ...

  6. Python调用微博API

    上头叫通过微博ID获取用户公布过的历史微博内容,于是研究了下新浪微博提供的API 1 首先在微博开放中心下"创建应用"创建一个应用,应用信息那些随便填,填写完成后,不须要提交审核, ...

  7. Jedis连接

    Jedis连接 到场api中的jedis.我们能够发现,jedis类提供了4个构造方法.都可用于连接: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc29 ...

  8. struts详细解释拦截器

    1.拦截器:Struts2拦截器将一个Action要么Action的方法.之前或截取后场,和Struts2拦截器是可插拔,拦截器AOP一种实现. WebWork:拦截器是动态拦截Action调用的对象 ...

  9. 【转】Android内存机制分析1——了解Android堆和栈

    昨天用Gallery做了一个图片浏览选择开机画面的功能,当我加载的图片多了就出现OOM问题.以前也出现过这个问题,那时候并没有深究.这次打算好好分析一下Android的内存机制. 因为我以前是做VC+ ...

  10. NET 中的多线程

    NET 中的多线程 为什么使用多线程 使用户界面能够随时相应用户输入 当某个应用程序在进行大量运算时候,为了保证应用程序能够随时相应客户的输入,这个时候我们往往需要让大量运算和相应用户输入这两个行为在 ...