文档章节

使用HttpURLConnection 请求Http post请求

kimyeongnam
 kimyeongnam
发布于 2017/01/14 12:09
字数 759
阅读 46
收藏 1

最近开发项目中需要写一段Http post请求的代码,其实代码本身没什么难度,网上一搜一大片,但是关键是要和第三方的对端进行联调,总之联调过程中出现了无数问题,从对端一开始提供get请求的服务,到不知道什么原因导致无法建立请求连接,到无缘无故又联调成功,期间经历了各种折磨。虽然到最后都不知道是什么原因导致的联调失败,不过还好通过这个问题,对http请求有了进一步的了解,废话不多说,下面进行总结。

1、首先附上源代码

private String getHttpResponseByPost(String input, String url) throws BaseAppException {

        HttpURLConnection httpConnection = null;
        StringBuffer responsebf = new StringBuffer();

        try {
            URL restServiceURL = new URL(url);
            httpConnection = (HttpURLConnection) restServiceURL.openConnection(); //①
            httpConnection.setDoOutput(true);                                     //②
            httpConnection.setDoInput(true);                                      //③
            
            httpConnection.setUseCaches(false);                                   //④
            httpConnection.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); //⑤
            httpConnection.setRequestMethod("POST");                              //⑥
            httpConnection.setConnectTimeout(30000);                              //⑦
            httpConnection.setReadTimeout(3000);                                  //⑧
            httpConnection.connect();                                             //⑨
                 
            OutputStream outputStream = httpConnection.getOutputStream();         //⑩
            outputStream.write(input.getBytes());                                 
            outputStream.flush();                                                 //⑪
            outputStream.close();                                                 //⑫
            
            BufferedReader responseBuffer = new BufferedReader(
                new InputStreamReader((httpConnection.getInputStream())));        //⑬
            String output = "";
            while ((output = responseBuffer.readLine()) != null) {
                responsebf.append(output);
            }
            httpConnection.disconnect();                                          //⑭
        }
        catch (Exception e) {
            return null;
        }
        finally {
            if (httpConnection != null) {
                httpConnection.disconnect();
            }
        }
        return responsebf.toString();
    }

2、下面对每一个方法进行解释

①openConnection()

该方法实际上是根据URL的请求协议(此处是http)生成的URLConnection类,为了使用子类HttpURLConnection的更多的API,故此处将进行强转。

②setDoOutput 

如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false

③setDoInput

如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true

④setUseCaches

默认值为true,一般get请求可以设置为使用缓存,post请求不可使用缓存

⑤setRequestProperty

根据不同的报文格式可以设置不同的文本类型,text/xml,text/json.....

⑥setRequestMethod

请求类型,可以是“POST”或者"GET"

⑦setConnectTimeout

设置连接主机超时(单位:毫秒) ,如果不设置超时,在网络异常的情况下,可能会导致程序僵死而不继续往下执行

⑧setReadTimeout

设置从主机读取数据超时(单位:毫秒) ,如果不设置,在网络异常的情况下,可能会导致程序僵死

⑨connect

打开到此 URL 引用的资源的通信链接,如果在已打开连接的情况下调用 connect 方法,则忽略该调用。 

getOutputStream方法中会隐含地调用connect,所以connect方法可以不需要显示调用。

⑩getOutputStream

获取url对应的输出流

⑪flush

刷新输出流,将任何字节都写入输出流中

⑫close

关闭输出流,不能再向输出流写入任何数据,先前写入的数据存在于内存缓冲区中,在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器

⑬getInputStream

将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端,实际发送请求的代码段就在这里

⑭disconnect

断开url连接

© 著作权归作者所有

kimyeongnam
粉丝 3
博文 60
码字总数 37724
作品 0
南京
程序员
私信 提问
使用java进行http通信

Http通信概述Http通信主要有两种方式POST方式和GET方式。前者通过Http消息实体发送数据给服务器,安全性高,数据传输大小没有限制,后者通过URL的查询字符串传递给服务器参数,以明文显示在浏...

不最醉不龟归
2016/12/28
18
0
URLConnection的连接、超时、关闭用法

Java中可以使用HttpURLConnection来请求WEB资源。 1、 URL请求的类别 分为二类,GET与POST请求。二者的区别在于: a:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet...

玄空
2013/02/17
628
0
Android网络编程之Http通信

Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序。以下是本人在学习中的总结与归纳。 1. HttpURLConnection接口 首先需要明确的是,Http通信中的POST和GET请求方式的...

xiahuawuyu
2012/07/19
1K
0
HttpURLConnection的使用  

HttpURLConnection的使用 /* * URL请求的类别分为二类,GET与POST请求。二者的区别在于: * a:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, * b:) post与get的不...

QH_C
2015/04/15
1K
0
Android 网络编程(三)HttpURLConnection

HttpURLConnection HTTP的URLConnection(RFC 2616)用于通过Web发送和接收数据。数据可以是任何类型和长度。该类可用于发送和接收长度未预先知道的流数据。 使用步骤 HttpURLConnection使用...

VNanyesheshou
2017/08/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

调用约定

对于常见的指令集,在指令层面没有所谓的“函数”概念,只有“子程序”概念。子程序是存储在“主程序”之外的一段指令。子程序通过call指令调用,通过ret指令返回。子程序可以使用内存、堆栈...

tommwq
44分钟前
3
0
设计类题目

1. 订单 和 退货单之间有什么关系? 答:退货单是 用 用户提交退货 和 订单生成的 或者 订单和退货单都是一张单子,用一个状态标识 2. 在这种由源头单生成的流程中,第二张单子是怎样生成的?...

杨凯123
59分钟前
5
0
读写锁分离

java.util.concurrent.locks包定义了两个锁类, 我们已经讨论的ReentrantLock类和 ReentrantReadWriteLock 类。 如果很多线程从一个数据结构读取数据而很少线程修改其中数 据的话, 后者是十...

ytuan996
今天
6
0
金钱焦虑症测试 -- 人人都有吧?

你经常觉得钱不够花,被金钱困扰着吗?试试这个焦虑量表测试,测试一下你的金钱焦虑指数吧。请选择选一个最适合自己态度的答案。买买买的欲望高吗?又是一个节日,有打折活动;又被种草一个化...

蛤蟆丸子
今天
4
0
JAVA-LOCK之底层实现原理(源码分析)

首先和Synchronized(可以参考) 的不同之处,Lock完全用Java写成,在java这个层面是无关JVM实现的。其实现都依赖java.util.concurrent.AbstractQueuedSynchronizer类,简称AQS。 简单说来,...

小海bug
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部