概述
2019独角兽企业重金招聘Python工程师标准>>>
最近开发项目中需要写一段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
最后
以上就是跳跃小蝴蝶为你收集整理的使用HttpURLConnection 请求Http post请求的全部内容,希望文章能够帮你解决使用HttpURLConnection 请求Http post请求所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复