发出HTTP请求并获得HTTP响应的过程如下:

(1)定义HTTP请求HttpPut(HttpPost/HttpGet/HttpDelete)等;

(2)定义各种Header,并加入HttpPut中;

(3)定义HttpEntitty,将要发送的XML字符串加入HttpEntity,并将HttpEntity加入HttpPut;

(4)定义HttpClient,执行HttpPut,并返回HttpResponse;

(5)从HttpResponse中获得StatusCode;

(6)从HttpResponse中获得各种Header;

(7)从HttpResponse中获得HttpEntity,并获得其中的字符串输出。

代码如下:

  1. // 修改队列参数
  2. public static void modify_queue_attributes(){
  3.  
  4. // 定义HttpClient
  5. HttpClient httpClient = new DefaultHttpClient();
  6. // Uri
  7. String hs = host + "/" + queName +"?Metaoverride=true";
  8. // 定义HttpPut
  9. HttpPut httpPut = new HttpPut(hs);
  10. // 各种Header
  11. httpPut.setHeader("Date", time);
  12. System.out.println("Date:" + time);
  13. httpPut.setHeader("x-mqs-version", version);
  14. System.out.println("x-mqs-version:" + version);
  15. httpPut.setHeader("Authorization", auth);
  16. System.out.println("Authorization:" + auth);
  17. httpPut.setHeader("Content-Type", content_type);
  18. System.out.println("Content-Type:" + content_type);
  19. // 消息体内容(XML格式)
  20. StringBuilder req = new StringBuilder();
  21. String s = new String("");
  22. s = "<?xml version=" + "\"" + "1.0" +"\"" + " encoding=" + "\"" + "UTF-8" + "\"" +" ?>";
  23. req.append(s);
  24. s = "<Queue xmlns=" + "\"" + "http://mqs.aliyuncs.com/doc/v1/" + "\"" + ">";
  25. req.append(s);
  26. s = "<VisibilityTimeout>120</VisibilityTimeout>";
  27. req.append(s);
  28. s = "<MaximumMessageSize>1024</MaximumMessageSize>";
  29. req.append(s);
  30. s = "<MessageRetentionPeriod>120</MessageRetentionPeriod>";
  31. req.append(s);
  32. s = "<DelaySeconds>60</DelaySeconds>";
  33. req.append(s);
  34. s = "</Queue>";
  35. req.append(s);
  36. System.out.println();
  37. System.out.println(req);
  38. // 定义HttpEntity
  39. HttpEntity entity;
  40. try{
  41. // StringEntity
  42. entity = new StringEntity(req.toString());
  43. // 为HttpPut设置Entity
  44. httpPut.setEntity(entity);
  45. // HttpClient执行HttpPut,并返回HttpResponse
  46. HttpResponse httpResponse = httpClient.execute(httpPut);
  47. // 获得StatusCode
  48. int statusCode = httpResponse.getStatusLine().getStatusCode();
  49. System.out.println("Status Code: " + statusCode);
  50. // 获得HttpResponse的各种Header
  51. Header[] header;
  52. header = httpResponse.getHeaders("Content-Length");
  53. if (header.length != 0){
  54. // System.out.println(header[0].toString());
  55. }
  56. header = httpResponse.getHeaders("Connection");
  57. if (header.length != 0){
  58. // System.out.println(header[0].toString());
  59. }
  60. header = httpResponse.getHeaders("Date");
  61. if (header.length != 0){
  62. // System.out.println(header[0].toString());
  63. }
  64. header = httpResponse.getHeaders("Server");
  65. if (header.length != 0){
  66. // System.out.println(header[0].toString());
  67. }
  68. header = httpResponse.getHeaders("x-mqs-request-id");
  69. if (header.length != 0){
  70. // System.out.println(header[0].toString());
  71. }
  72. header = httpResponse.getHeaders("x-mqs-version");
  73. if (header.length != 0){
  74. // System.out.println(header[0].toString());
  75. }
  76.  
  77. // 获得HttpResponse的HttpEntity并以字符串形式输出
  78. HttpEntity httpEntity = httpResponse.getEntity();
  79. if (httpEntity != null){
  80. InputStream instreams = httpEntity.getContent();
  81. String str = ConvertStreamToString(instreams);
  82. System.out.println("Response:" + "\n" + str);
  83. }
  84. }
  85. catch(Exception e){
  86. System.out.println("Error=" + e.toString());
  87. }
  88.  
  89. }

返回结果为:

  1. Status Code: 403
  2. Response:
  3. <?xml version="1.0"?>
  4. <Error xmlns="http://mqs.aliyuncs.com/doc/v1">
  5. <Code>SignatureDoesNotMatch</Code>
  6. <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
  7. <RequestId>53D60FE4048A936A361D8ABA</RequestId>
  8. <HostId>http://huvaw6yih3.mqs-cn-hangzhou.aliyuncs.com</HostId>
  9. </Error>

发出HTTP请求并获得HTTP响应的更多相关文章

  1. 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求

    转http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 ...

  2. ajax客户端请求与服务端响应浅谈

    AJAX,即Asynchronous Javascript And XML,AJAX本质是在HTTP协议的基础上以异步的方式与服务器进行通信. 所谓的异步,是指某段程序执行不会阻塞其他程序执行,其表现 ...

  3. http请求报文格式和响应报文格式

    转载 出处 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求 ...

  4. HTTP请求格式和HTTP响应格式

    主要内容: 1.HTTP请求格式 2.HTTP响应格式 一.HTTP请求格式 当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:l   请求方 ...

  5. 简述HTTP报文请求方法和状态响应码

    1. Method 请求方法,表明客户端希望服务器对资源执行的动作: 1.1 GET 向服务器请求资源. 1.2 HEAD 和GET方法的行为类似,但服务器在响应中只返回首部,不会返回实体的主体部分. ...

  6. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  7. 转:无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动

    今天看到一篇文章感觉不错,收藏转载下. 原文地址:http://blog.csdn.net/sntyy/article/details/2090347 版权为原作者所有 无法向会话状态服务器发出会话状 ...

  8. HTTP请求报文和HTTP响应报文

    HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. HTTP请求报文 一个HTTP请求报文由请求行(request ...

  9. HTTP请求报文和HTTP响应报文(转)

    原文地址:http://blog.csdn.net/zhangliang_571/article/details/23508953 HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串, ...

随机推荐

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK

    Senparc.Weixin.MP SDK已经涵盖了微信6.x的所有公共API. 整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:https://github.com/JeffreySu ...

  2. 掌握js模板引擎

    最近要做一个小项目,不管是使用angularjs还是reactjs,都觉得大材小用了.其实我可能只需要引入一个jquery,但想到jquery对dom的操作,对于早已习惯了双向绑定模式的我,何尝不是一 ...

  3. Redis总结笔记(一):安装和常用命令

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/112.html?1455860824 一.redis简单介绍 redis是 ...

  4. 爱上MVC3~MVC+ZTree实现对树的CURD及拖拽操作

    回到目录 上一讲中,我们学习了如何使用zTree对一棵大树(大数据量的树型结构的数据表,呵呵,名称有点绕,但说的是事实)进行异步加载,今天这讲,我们来说说,如何去操作这棵大树,无非就是添加子节点,删除 ...

  5. Js~对数组进行分组户数

    在sql里有group by,主要对数据结果集进行分组统计,而对于JS来说,有时我们也需要这种功能,例如一个数据{"dog","cat","dog&q ...

  6. 每天一个linux命令(38):cal 命令

    cal命令可以用来显示公历(阳历)日历.公历是现在国际通用的历法,又称格列历,通称阳历."阳历"又名"太阳历",系以地球绕行太阳一周为一年,为西方各国所通用,故 ...

  7. dubbo+zookeeper简单环境搭建

    dubbo+zoopeeper例子 [TOC] 标签(空格分隔): 分布式 dubbo dubbo相关 dubbo是目前国内比较流行的一种分布式服务治理方案.还有一种就是esb了.一般采用的是基于Ap ...

  8. java之内部类详解

    序言 有位小同学要我写一篇这个的总结,我说那好吧,那就动手写总结一下这个内部类的知识,感觉这个在面试中也会经常遇到,内部类.反射.集合.IO流.异常.多线程.泛型这些重要的基础知识大家都比较容易记不住 ...

  9. Ubuntu-安装-theano+caffe-超详细教程

    一.说明 本文是继<Ubuntu-安装-cuda7.0-单显卡-超详细教程> 之后的续篇.theano和caffe是深度学习库,对运算能力需求很大,最好使用cuda进行加速.所以,请先阅读 ...

  10. 了解HTML表单之input元素的23种type类型

    目录 传统类型 text password file radio checkbox hidden button image reset submit 新增类型 color tel email url ...