使用HttpURLConnection 请求Http post请求

最近开发项目中需要写一段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连接

转载于:https://my.oschina.net/kimyeongnam/blog/824723

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值