HttpClient(apache) 与 java.net.URL ---处理http请求

来源:互联网 发布:淘宝买一加5靠谱吗 编辑:程序博客网 时间:2024/06/05 08:27

HttpClient(apache) 与java.net.URL 处理http请求

① :org.apache.http.client.HttpClient;

Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会更加深入。

简介

HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如ApacheJakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。

下载地址: http://hc.apache.org/downloads.cgi

特性

1. 基于标准、纯净的java语言。实现了Http1.0和Http1.1

2. 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE,HEAD, OPTIONS, and TRACE)。

3. 支持HTTPS协议。

4. 通过Http代理建立透明的连接。

5. 利用CONNECT方法通过Http代理建立隧道的https连接。

6. Basic, Digest,NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos认证方案。

7. 插件式的自定义认证方案。

8. 便携可靠的套接字工厂使它更容易的使用第三方解决方案。

9. 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。

10. 自动处理Set-Cookie中的Cookie。

11. 插件式的自定义Cookie策略。

12. Request的输出流可以避免流中内容直接缓冲到socket服务器。

13. Response的输入流可以有效的从socket服务器直接读取相应内容。

14. 在http1.0和http1.1中利用KeepAlive保持持久连接。

15. 直接获取服务器发送的responsecode和 headers。

16. 设置连接超时的能力。

17. 实验性的支持http1.1 response caching。

18. 源代码基于Apache License 可免费获取。

使用方法

使用HttpClient发送请求、接收响应,一般需要如下几步即可。

步骤:

1. 创建HttpClient对象。

2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HttpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntityentity)方法来设置请求参数。

4. 调用HttpClient对象的execute(HttpUriRequestrequest)发送请求,该方法返回一个HttpResponse。

5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

6. 释放连接。无论执行方法是否成功,都必须释放连接

实例

[java] view plain copy

 

1.  package com.test;  

2.   

3.  import java.io.File;  

4. import java.io.FileInputStream;  

5.  import java.io.IOException;  

6. import java.io.UnsupportedEncodingException;  

7.  import java.security.KeyManagementException;  

8. import java.security.KeyStore;  

9.  import java.security.KeyStoreException;  

10.import java.security.NoSuchAlgorithmException;  

11. import java.security.cert.CertificateException;  

12.import java.util.ArrayList;  

13. import java.util.List;  

14.  

15. import javax.net.ssl.SSLContext;  

16.  

17. import org.apache.http.HttpEntity;  

18.import org.apache.http.NameValuePair;  

19. import org.apache.http.ParseException;  

20.import org.apache.http.client.ClientProtocolException;  

21. import org.apache.http.client.entity.UrlEncodedFormEntity;  

22.import org.apache.http.client.methods.CloseableHttpResponse;  

23. import org.apache.http.client.methods.HttpGet;  

24.import org.apache.http.client.methods.HttpPost;  

25. import org.apache.http.conn.ssl.SSLConnectionSocketFactory;  

26.import org.apache.http.conn.ssl.SSLContexts;  

27. import org.apache.http.conn.ssl.TrustSelfSignedStrategy;  

28.import org.apache.http.entity.ContentType;  

29. import org.apache.http.entity.mime.MultipartEntityBuilder;  

30.import org.apache.http.entity.mime.content.FileBody;  

31. import org.apache.http.entity.mime.content.StringBody;  

32.import org.apache.http.impl.client.CloseableHttpClient;  

33. import org.apache.http.impl.client.HttpClients;  

34.import org.apache.http.message.BasicNameValuePair;  

35. import org.apache.http.util.EntityUtils;  

36.import org.junit.Test;  

37.   

38.public class HttpClientTest {  

39.   

40.    @Test  

41.     public void jUnitTest() {  

42.        get();  

43.     }  

44.  

45.     /** 

46.     * HttpClient连接SSL 

47.      */  

48.    public void ssl() {  

49.         CloseableHttpClient httpclient = null;  

50.        try {  

51.             KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());  

52.            FileInputStream instream = new FileInputStream(new File("d:\\tomcat.keystore"));  

53.             try {  

54.                // 加载keyStore d:\\tomcat.keystore    

55.                 trustStore.load(instream, "123456".toCharArray());  

56.            } catch (CertificateException e) {  

57.                 e.printStackTrace();  

58.            } finally {  

59.                 try {  

60.                    instream.close();  

61.                 } catch (Exception ignore) {  

62.                }  

63.             }  

64.            // 相信自己的CA和所有自签名的证书  

65.             SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()).build();  

66.            // 只允许使用TLSv1协议  

67.             SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null,  

68.                    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);  

69.             httpclient HttpClients.custom().setSSLSocketFactory(sslsf).build();  

70.            // 创建http请求(get方式)  

71.             HttpGet httpget = new HttpGet("https://localhost:8443/myDemo/Ajax/serivceJ.action");  

72.            System.out.println("executing request" + httpget.getRequestLine());  

73.             CloseableHttpResponse response = httpclient.execute(httpget);  

74.            try {  

75.                 HttpEntity entity = response.getEntity();  

76.                System.out.println("----------------------------------------");  

77.                 System.out.println(response.getStatusLine());  

78.                if (entity != null) {  

79.                     System.out.println("Response content length: " + entity.getContentLength());  

80.                    System.out.println(EntityUtils.toString(entity));  

81.                     EntityUtils.consume(entity);  

82.                }  

83.             } finally {  

84.                response.close();  

85.             }  

86.        } catch (ParseException e) {  

87.             e.printStackTrace();  

88.        } catch (IOException e) {  

89.             e.printStackTrace();  

90.        } catch (KeyManagementException e) {  

91.             e.printStackTrace();  

92.        } catch (NoSuchAlgorithmException e) {  

93.             e.printStackTrace();  

94.        } catch (KeyStoreException e) {  

95.             e.printStackTrace();  

96.        } finally {  

97.             if (httpclient != null) {  

98.                try {  

99.                     httpclient.close();  

100.                } catch (IOException e) {  

101.                     e.printStackTrace();  

102.                }  

103.             }  

104.        }  

105.     }  

106.  

107.     /** 

108.     * post方式提交表单(模拟用户登录请求) 

109.      */  

110.    public void postForm() {  

111.         // 创建默认的httpClient实例.    

112.        CloseableHttpClient httpclient = HttpClients.createDefault();  

113.         // 创建httppost    

114.        HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceJ.action");  

115.         // 创建参数队列    

116.        List<namevaluepair> formparams = new ArrayList<namevaluepair>();  

117.         formparams.add(new BasicNameValuePair("username""admin"));  

118.        formparams.add(new BasicNameValuePair("password""123456"));  

119.         UrlEncodedFormEntity uefEntity;  

120.        try {  

121.             uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");  

122.            httppost.setEntity(uefEntity);  

123.             System.out.println("executing request " + httppost.getURI());  

124.            CloseableHttpResponse response = httpclient.execute(httppost);  

125.             try {  

126.                HttpEntity entity = response.getEntity();  

127.                 if (entity != null) {  

128.                    System.out.println("--------------------------------------");  

129.                     System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8"));  

130.                    System.out.println("--------------------------------------");  

131.                 }  

132.            } finally {  

133.                 response.close();  

134.            }  

135.         } catch (ClientProtocolException e) {  

136.            e.printStackTrace();  

137.         } catch (UnsupportedEncodingException e1) {  

138.            e1.printStackTrace();  

139.         } catch (IOException e) {  

140.            e.printStackTrace();  

141.         } finally {  

142.            // 关闭连接,释放资源    

143.             try {  

144.                httpclient.close();  

145.             } catch (IOException e) {  

146.                e.printStackTrace();  

147.             }  

148.        }  

149.     }  

150.  

151.     /** 

152.     * 发送 post请求访问本地应用并根据传递参数不同返回不同结果 

153.      */  

154.    public void post() {  

155.         // 创建默认的httpClient实例.    

156.        CloseableHttpClient httpclient = HttpClients.createDefault();  

157.         // 创建httppost    

158.        HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceJ.action");  

159.         // 创建参数队列    

160.        List<namevaluepair> formparams = new ArrayList<namevaluepair>();  

161.         formparams.add(new BasicNameValuePair("type""house"));  

162.        UrlEncodedFormEntity uefEntity;  

163.         try {  

164.            uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");  

165.             httppost.setEntity(uefEntity);  

166.            System.out.println("executing request " + httppost.getURI());  

167.             CloseableHttpResponse response = httpclient.execute(httppost);  

168.            try {  

169.                 HttpEntity entity = response.getEntity();  

170.                if (entity != null) {  

171.                     System.out.println("--------------------------------------");  

172.                    System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8"));  

173.                     System.out.println("--------------------------------------");  

174.                }  

175.             } finally {  

176.                response.close();  

177.             }  

178.        } catch (ClientProtocolException e) {  

179.             e.printStackTrace();  

180.        } catch (UnsupportedEncodingException e1) {  

181.             e1.printStackTrace();  

182.        } catch (IOException e) {  

183.             e.printStackTrace();  

184.        } finally {  

185.             // 关闭连接,释放资源    

186.            try {  

187.                 httpclient.close();  

188.            } catch (IOException e) {  

189.                 e.printStackTrace();  

190.            }  

191.         }  

192.    }  

193.   

194.    /** 

195.      * 发送 get请求 

196.     */  

197.     public void get() {  

198.        CloseableHttpClient httpclient = HttpClients.createDefault();  

199.         try {  

200.            // 创建httpget.    

201.             HttpGet httpget = new HttpGet("http://www.baidu.com/");  

202.            System.out.println("executing request " + httpget.getURI());  

203.             // 执行get请求.    

204.            CloseableHttpResponse response = httpclient.execute(httpget);  

205.             try {  

206.                // 获取响应实体    

207.                 HttpEntity entity = response.getEntity();  

208.                System.out.println("--------------------------------------");  

209.                 // 打印响应状态    

210.                System.out.println(response.getStatusLine());  

211.                 if (entity != null) {  

212.                    // 打印响应内容长度    

213.                     System.out.println("Response content length: " + entity.getContentLength());  

214.                    // 打印响应内容    

215.                     System.out.println("Response content: " + EntityUtils.toString(entity));  

216.                }  

217.                 System.out.println("------------------------------------");  

218.            } finally {  

219.                 response.close();  

220.            }  

221.         } catch (ClientProtocolException e) {  

222.            e.printStackTrace();  

223.         } catch (ParseException e) {  

224.            e.printStackTrace();  

225.         } catch (IOException e) {  

226.            e.printStackTrace();  

227.         } finally {  

228.            // 关闭连接,释放资源    

229.             try {  

230.                httpclient.close();  

231.             } catch (IOException e) {  

232.                e.printStackTrace();  

233.             }  

234.        }  

235.     }  

236.  

237.     /** 

238.     * 上传文件 

239.      */  

240.    public void upload() {  

241.         CloseableHttpClient httpclient = HttpClients.createDefault();  

242.        try {  

243.             HttpPost httppost = new HttpPost("http://localhost:8080/myDemo/Ajax/serivceFile.action");  

244.  

245.             FileBody bin = new FileBody(new File("F:\\image\\sendpix0.jpg"));  

246.            StringBody comment = new StringBody("A binary file of some kind", ContentType.TEXT_PLAIN);  

247.   

248.            HttpEntity reqEntity = MultipartEntityBuilder.create().addPart("bin", bin).addPart("comment", comment).build();  

249.   

250.            httppost.setEntity(reqEntity);  

251.   

252.            System.out.println("executing request " + httppost.getRequestLine());  

253.             CloseableHttpResponse response = httpclient.execute(httppost);  

254.            try {  

255.                 System.out.println("----------------------------------------");  

256.                System.out.println(response.getStatusLine());  

257.                 HttpEntity resEntity = response.getEntity();  

258.                if (resEntity != null) {  

259.                     System.out.println("Response content length: " + resEntity.getContentLength());  

260.                }  

261.                 EntityUtils.consume(resEntity);  

262.            } finally {  

263.                 response.close();  

264.            }  

265.         } catch (ClientProtocolException e) {  

266.            e.printStackTrace();  

267.         } catch (IOException e) {  

268.            e.printStackTrace();  

269.         } finally {  

270.            try {  

271.                 httpclient.close();  

272.            } catch (IOException e) {  

273.                 e.printStackTrace();  

274.            }  

275.         }  

276.    }  

本实例是采用HttpClient4.3最新版本。该版本与之前的代码写法风格相差较大,大家多留意下。

 

② :java.net.URL

 

 

一、用JAVA实现URL 
JAVA中,Java.net包里面的类是进行网络编程的,其中java.net.URL类和java.net.URLConection类使编程者方便地利用URLInternet上进行网络通信。

1、创建URL对象
URL类有多种形式的构造函数:

(1) URL ( String url)
  //url代表一个绝对地址,URL对象直接指向这个资源,如:
  URL urll=new URL(http://www.cqwu.edu.cn);

(2) URL ( URL baseURL , String relativeURL)
 // 其中,baseURL代表绝对地址,relativeURL代表相对地址。如:
  URL urll=new URL(http://www.cqwu.edu.cn);
  URL lib=new URL(urll , "library / library.asp");

(3) URL ( String protocol , String host , String file)
  //其中,protocol代表通信协议,host代表主机名,file代表文件名。如:
  new URL ("http" , www.cqwu.edu.cn, "/ test / test.asp");

(4) URL ( String protocol , String host , int port , String file)
  URL lib = new URL ("http" , www.cqwu.edu.cn, 80 , "/ test / test.asp");



2、获取URL对象的属性
getDefaultPort()返回默认的端口号。
getFile()获得URL指定资源的完整文件名。
getHost()返回主机名。
getPath()返回指定资源的文件目录和文件名。
getPort()返回端口号,默认为-1
getProtocol()返回表示URL中协议的字符串对象。
getRef()返回URL中的HTML文档标记,即#号标记。
getUserInfo返回用户信息。
toString返回完整的URL字符串。

二、Internet寻址
java.net包可以用32int形式来操作32位的IP地址(Internet主机地址)。类InetAddress实际上是可以把Internet地址换算成代表该地址的对象。Java就是靠这个类来显示Internet地址已经相关信息的。
InetAddress有以下常用方法:
getAddress()返回IP地址的字节形式。
getAllByName()返回指定主机名的IP地址。
getbyAddress()返回指定字节数组的IP地址形式。
getByName()返回指定主机名的IP地址对象。
getHostAddress()返回主机地址的字符串形式。
getLocalHost()返回当前主机名。
hastCode()返回InetAddress对象的哈希码。
toString返回地址转换成的字符串。
InetAddress类没有提供返回构造函数,所以不能用new()方法来创建它的对象,而只可以调用静态方法getLocalHost()getByName()getByAddress()等来生成InetAddress类的实质。
 程序代码

import java.net.*;

import java.io.*;

 

public class InetAddDemo // extends Applet

{

         publicvoid testOperate() {

                   try{

                            InetAddressaddress = InetAddress.getLocalHost();

                            log("本机地址字符串:"+ address.getHostAddress());

                            log("本机主机名:"+ address.getHostName());

                            log("本机主机名:"+ address.getLocalHost());

                            log("哈希码:" +address.hashCode());

                            byteb[] = address.getAddress();

                            System.out.println("字符形式:"+ b);

                            log("地址字符串:"+ address.toString());

                   }catch (Exception e) {

                            //e.printStackTrace("不能打开这个URL");

                   }

         }

         publicvoid log(String strInfo) {

                   System.out.println(strInfo);

         }

         publicstatic void main(String args[]) {

                   InetAddDemoIAdd = new InetAddDemo();

                   IAdd.testOperate();

         }

}


结果: 

本机地址字符串:192.9.200.108
本机主机名:s5
本机主机名:s5/192.9.200.108
哈希码:-1073100692
字符形式:[B@f4a24a
地址字符串:s5/192.9.200.108


有两种方法可以用来访问Internet。一是利用URL类的openStream()方法;二是使用openConnection()方法创建一个URLConnection类的对象。
  其中,方法openStream()与指定的URL建立连接并返回InputStream类的对象,以从这一连接中读取数据。



importjava.net.*;

importjava.io.*;

 

public class ReadURL{

    public static voidmain(String args[]) throwsException {

       try {

           URL url = new URL("http://www.baidu.com");

           InputStreamReader isr =newInputStreamReader(url.openStream());

           BufferedReader br =newBufferedReader(isr);

 

           String str;

           while ((str =br.readLine())!= null) {

              System.out.println(str);

           }

 

           br.close();

           isr.close();

       } catch(Exceptione) {

           System.out.println(e);

       }

    }

}
结果:

 <html><head><title>百度一下,你就知道   </title><metahttp-equiv=Content-Type content="text/html;charset=gb2312">

  <style> body{ }{margin:4px0 4px 0;}img{ }{border:0}td,p{ }{font-size:12px}p{}{width:600px;margin:0;padding:0}.kw{ }{font-family:Verdana;font-size:16px;height:1.78em;padding-top:2px;}

  #b { }{width:600px;height:30px;padding-top:4px;color:#77c;font-size:12px;font-family:Arial}#ba{ }{color:#77c;font-size:12px}

  #usrbar{ }{padding-right:10px;line-height:19px;font-size:12px;font-family:Arial;text-align:right;white-space:nowrap;margin-bottom:3px!important;margin-bottom:10px;}

  .sb{ }{height:2em;width:5.6em;font-size:14px;}#km{}{font-size:14px;height:50px;}a{ }{font-family:arial}#kma{ }{font-family:宋体}

  #l{ }{font-size:14px;font-family:arial;width:600px;text-align:left;margin-bottom:5px}

  #l tr td{ }{text-align:left;font-family:arial;}

  #l tr td div{ }{font-size:14px;margin-left:92px;width:22.1em;text-align:center;}</style><script>

  function h(obj,url) {obj.style.behavior='url(#default#homepage)';obj.setHomePage(url);}

  function g() {var ls=location.search;if(ls.indexOf("q=")!=-1){try {var q=(ls.match(newRegExp("q=[^&$]*")).toString());document.f.wd.value=decodeURIComponent(q.substr(2));}catch(e){}}}

  function s(o,p) {if(document.f.wd.value.length>0){var oh=o.href;var qw=encodeURIComponent(document.f.wd.value);if(oh.indexOf("q=")!=-1){o.href=oh.replace(new RegExp("q=[^&$]*"),"q="+qw);}else {vars=p?"&":"?";o.href=o.href+s+"q="+qw};}}</script></head>

 <bodytext=000000 link=0000cc vlink=0000cc alink=ff6600>

  <div id="usrbar"><scriptlanguage="JavaScript">document.write('<ahref="http://passport.baidu.com/?login&tpl=mn&u='+escape(location.href)+'">登录</a>');</script></div>

 <center><a href=http://hi.baidu.com/baidutarget=_blank><imgsrc=http://www.baidu.com/img/logo.gif width=174height=59 alt="点此进入百度空间"></a><br><br><br><br>

 <table border="0"cellpadding="0" cellspacing="0" id="l"><tr><td><div><a href="http://news.baidu.com"onclick="return s(this);">新&nbsp;闻</a>&nbsp;&nbsp;&nbsp;&nbsp;<strong>网&nbsp;页</strong>&nbsp;&nbsp;&nbsp;&nbsp;<ahref="http://post.baidu.com/f?ct=486539264&cm=58580&tn=baiduForumIndex"onclick="return s(this,1);">贴&nbsp;吧</a>&nbsp;&nbsp;&nbsp;&nbsp;<ahref="http://zhidao.baidu.com"onclick="return s(this);">知&nbsp;道</a>&nbsp;&nbsp;&nbsp;&nbsp;<ahref="http://mp3.baidu.com"onclick="return s(this);">MP3</a>&nbsp;&nbsp;&nbsp;&nbsp;<ahref="http://image.baidu.com"onclick="return s(this);">图&nbsp;片</a></div></td></table>

  <table width=600 border=0 cellpadding=0cellspacing=0><tr valign=top><td width=92></td><tdheight=62> <form name=f action=/s><input type=text name=wdclass=kwsize=36 maxlength=100><script> document.f.wd.focus();g()</script><inputtype=hidden name=cl value=3> <input type=submit value=百度一下class=sb><br><br></form></td><tdwidth=100><a href=/search/jiqiao.html>帮助</a><br><ahref=/gaoji/advanced.html>高级</a></td></tr></table>

 <p id=km>&nbsp;<a href="http://hi.baidu.com/">空间</a>&nbsp;|&nbsp;<ahref="http://www.baidu.com/more/">更多>></a></p>

 <pstyle=height:60px;>&nbsp;</p>

 <p style=height:30px;><a onclick="h(this,'http://www.baidu.com')"href=http://utility.baidu.com/traf/click.php?id=215&url=http://www.baidu.com>把百度设为首页</a></p>

 <p style=height:14px;><a href=http://jingjia.baidu.com/>企业推广</a>| <ahref=http://top.baidu.com/>搜索风云榜</a>| <ahref=/home.html>关于百度</a> | <ahref=http://ir.baidu.com>AboutBaidu</a></p><p id=b>&copy;2007 Baidu <ahref=http://www.baidu.com/duty/>使用百度前必读</a> <ahref=http://www.miibeian.gov.cn/target=_blank>ICP030173</a><ahref=http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001092500412><imgsrc=http://gimg.baidu.com/img/gs.gif></a></p></center></body></html>

 

 



上例首先创建URL对象url,并在其基础上打开输入流获取InputStreamReader对象,再由此对象创建BufferedReader对象br,从br中读取数据即可得到url所指定的资源文件。
  上面的openStream()方法只能读取网络资源,若要既能读取又能发送数据,则要用到URL类的openConnection()方法来创建一个 URLConnection类的对象,此对象在本地机和URL指定的远程节点建立一条HTTP协议的数据通道,可进行双向数据传输。
  类URLConnection提供了很多设置和获取连接参数的方法,最常用到的是getInputStream()getOutputStream()方法,如:
URL sum=new URL("http://java.sum.com/cgi-bin/backwards");
URLConnection suncon=buaa.openConnection();
sumcon.setDoOutput(true);
DataInputStream dis=newDataInputStream(suncon.getInputStream());
PrintStream ps=new PrintStream(suncon.getOutputStream());
String str=dis.readLine();
ps.println("来自客户机的信息:.......");

 

 

 

简单实例二:

 

importjava.net.HttpURLConnection;

importjava.net.SocketTimeoutException;

import java.net.URL;

 

public static StringpostUsingXml(String postUrl, StringxmlParamsString, String charset) {

        String retStr = null;

        try {

            URL url = newURL(postUrl); //创建Url对象

            HttpURLConnection connection =null; //打开连接

            connection =(HttpURLConnection) url.openConnection();

            connection.setRequestProperty("content-type","text/xml;charset=" + charset);

            connection.setDoInput(true);

            connection.setDoOutput(true);

            connection.setRequestMethod("POST");

           OutputStream out = null;

            out = connection.getOutputStream();//打开连接的输出流

            String reqData = null;

            reqData = xmlParamsString;

            out.write(reqData.getBytes(charset));//将请求数据写到流中

            intlen = connection.getContentLength();

//Yue:Return the content length of the resource that thisconnection's URL references,

                                                //-1if the content length is not known, or if the content length is greater thanInteger.MAX_VALUE.

            byte[]retData;

            retData =readContent(connection.getInputStream(),len); //另外写的方法,读取返回结果。

            retStr = new String(retData,charset);

        } catch(UnsupportedEncodingExceptione1) {

        } catch(IOExceptione1) {

        }

        returnretStr;

    }

 

 

private static byte[] readContent(InputStream in, intlen) throwsIOException {

        if (len<= 0) {

            byte[]buf = newbyte[2048];

            byte[]readBuf = newbyte[1024];

            inttotalLen = 0;

            while (true) {

                intreadLen = in.read(readBuf);

                if (readLen<= 0)

                    break;

                if (totalLen +readLen >buf.length) {

                    byte[]tmp = newbyte[buf.length +readLen +1024];

                    System.arraycopy(buf, 0,tmp, 0, totalLen);

                    buf = tmp;

                }

                System.arraycopy(readBuf, 0,buf, totalLen,readLen);

                totalLen = totalLen + readLen;

            }

            byte[]retBuf = newbyte[totalLen];

            System.arraycopy(buf, 0,retBuf, 0, totalLen);

            returnretBuf;

        } else {

            inttotalLen = 0;

            byte[]buf = newbyte[len];

            while (totalLen <len) {

                intreadLen = in.read(buf,totalLen, len -totalLen);

                if (readLen<= 0)

                    break;

                totalLen = totalLen + readLen;

            }

            returnbuf;

        }

    }

 

0 0