您的位置:首页 > 理论基础 > 计算机网络

httpclient请求

2015-07-06 10:27 716 查看

之前很多次用到过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;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: