httpclient请求

之前很多次用到过httpclient,尤其是在做接口对接的时候,今天在做接口对接的时候,发现了两个问题:1.HttpClient 对象的executeMethod 方法里面的参数是PostMethod 对象,执行这行代码的时候,有些情况下,执行到这段代码的时候所花费的时间比较长。

2.PostMethod 对象的getResponseBodyAsString 返回值是string的时候,当返回值过大的时候会给你警告:

警告: Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.

所以可以按警告的要求将采用getResponseBodyAsStream 方法来获取返回值,具体如下:

	BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));  
		StringBuffer stringBuffer = new StringBuffer();  
		String str = "";  
		while((str = reader.readLine())!=null){  
		    stringBuffer.append(str);  
		}  
		String ts = stringBuffer.toString();

 return ts。结束.

但是对于第一个问题我在网上找了好多资料,说是有的时候PostMethod 对象的值过大,导致client.executeMethod(post);这段代码执行时间过长,但是我在debug的过程中发现,其实post的大小都是差不多的,都是传了一个值,所以我现在还在想到底是什么原因,有知道的大神可以在这里分享下,大家一起来交流。

  /**
	 * 发送http请求,以post方式
	 * @param url
	 * @return
	 * @throws IOException
	 * @throws HttpException
	 */
	public static String doPost(String url,String name,String responeJsonStr) throws IOException,HttpException{
		
		//强制设置可信任证书
		Protocol myhttps = new Protocol("https", new MySSLProtocolSocketFactory(), 443);   
		Protocol.registerProtocol("https", myhttps);
		
		HttpClient client = new HttpClient();
		PostMethod post = new PostMethod(url);
		post.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
		if(StrUtil.isNotNull(name)){
			NameValuePair[] param = {new NameValuePair(name,responeJsonStr)} ;
			post.setRequestBody(param);
		}else{
			post.setRequestBody(responeJsonStr);
		}
		post.getParams().setContentCharset("utf-8");
		//发送http请求
		String respStr = "";
		
		client.executeMethod(post);
		respStr = post.getResponseBodyAsString();
		
		return respStr;
	}

猜你喜欢

转载自yt-lemon.iteye.com/blog/2224616