在和另一应用通过post传数据时,怎么会偶尔情况下连接不了对方的应用呢?有大虾知道的么?代码如下:
在和另一应用通过post传数据时,怎么会偶尔情况下连接不了对方的应用呢?有大虾知道的么?代码如下:public class SendPostRequest {
private HttpClient httpClient;
private String url = DefaultParamBean.POSTURL;
public void init() {
this.httpClient = new HttpClient();
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
}
// 手机服务端post提交通用接口
public String sendUrlAndGetResMsg(String params) throws IOException{
init();
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(10000);
url = url+"?param="+params;
//设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);
/*
* 使用GET方法,提示:如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
* HttpMethod method = new GetMethod(url);
*/
//使用POST方法
HttpMethod method = new PostMethod(url);
//设置成了默认的恢复策略,在发生异常时候将自动重试3次,在这里你也可以设置成自定义的恢复策略
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
//执行 get/post Method
int statusCode = httpClient.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
//打印服务器返回的状态
System.out.println(method.getStatusLine());
byte[] responseBody = method.getResponseBody();
//打印返回的信息
String returnUrl = new String(responseBody,"UTF-8");
//释放连接
method.releaseConnection();
return returnUrl;
}
}
提示如下警告:
WARN org.apache.commons.httpclient.HttpMethodBase - Going to buffer response body of large or unknown size. Using getResponseAsStream instead is recommended.
现在是能访问到另一应用,但时有访问不到的情况,调的越频繁,访问就越是访问不了另一应用.
有谁知道是什么原因呢?帮帮小弟哦. --------------------编程问答-------------------- 容量太大,HttpClient可能处理不了(large or unknown size),所以HttpClient建议你用 getResponseAsStream 而不要用 getResponseBody。 --------------------编程问答-------------------- byte[] responseBody = method.getResponseBody();
这块改成下面的:
byte[] responseBody = method.getResponseAsStream();
这个么?
--------------------编程问答-------------------- No。
因为getResponseBody要求将所有数据读取完毕并缓存在内存中(在这里也就是 byte[])。
而getResponseAsStream是流式操作,如果你尝试过操作磁盘文件的话就不难理解,流式操作可以不需要完整的将所有数据放在内存中。 --------------------编程问答-------------------- 那这块怎么写呢?
能明白些么? --------------------编程问答-------------------- 呃。。。似乎三两句又说不清了,大概是:
Scanner sc = new Scanner(method.getResponseAsStream());
while (sc.hasNext()) {
String line = sc.nextLine();
// 处理line。
}
但不过其实有点跑题,我认为你说的问题,跟这个WARN应该关系不大。
问题可能出在服务器端,承受并发压力的能力不足。
补充:Java , Web 开发