java关于URL类的调用。。。

publicstaticStringgetHtml(Stringurl,Stringtype,Stringparams,DHashMapheader,DHashMapsP... public static String getHtml(String url, String type, String params, DHashMap header, DHashMap sParams) {
String proxy = (String) sParams.get("proxy");
String proxyIP = (String) sParams.get("proxyip");
String proxyPort = (String) sParams.get("proxyport");
String format = (String) sParams.get("format");
StringBuilder result = new StringBuilder();
if (format == null) {
format = "utf-8";
}
if (type == null) {
type = "GET";
}
if (params == null) {
params = "";
}
if (type.equalsIgnoreCase("GET")) {
url += "?" + params;
}
try {
URL u = new URL(url);
// /创建代理服务器
HttpURLConnection connection;
connection = (HttpURLConnection) u.openConnection();// 设置代理访问
if (Boolean.parseBoolean(proxy)) {
InetSocketAddress addr = new InetSocketAddress(proxyIP, Integer.valueOf(proxyPort));
Proxy uProxy = new Proxy(Proxy.Type.HTTP, addr); // http 代理
connection = (HttpURLConnection) u.openConnection(uProxy);// 设置代理访问
}
connection.setDoOutput(true);// 使用 URL 连接进行输出
connection.setDoInput(true);// 使用 URL 连接进行输入
connection.setUseCaches(false);// 忽略缓存
connection.setRequestProperty("Connection", "Close");
//////
connection.setRequestMethod(type);
Iterator iter = header.keySet().iterator();
while (iter.hasNext()) {//写网页头
String key = (String) iter.next();
String val = (String) header.get(key);
connection.setRequestProperty(key, val);
}
if (type.equalsIgnoreCase("POST") && !(params == null)) {
byte[] requestStringBytes = params.getBytes();
connection.setRequestProperty("Content-length", "" + requestStringBytes.length);
OutputStream op = connection.getOutputStream();
op.write(requestStringBytes);//写POST数据
op.close();
}
InputStreamReader in = new InputStreamReader(connection.getInputStream(), format);
BufferedReader reader = new BufferedReader(in);
while (true) {
String s = reader.readLine();
if (s == null) {
return result.toString();
}
result.append(s);
//result += s;
}
} catch (Exception ex) {
Logger.getLogger(DDMHttp.class.getName()).log(Level.SEVERE, null, ex);
}
return result.toString();
}
可是使用的时候偶尔会出现响应时间非常久。。。正常的情况下是100ms以下的响应速度。。。但是偶尔会出现好几秒的响应速度。。。也不知道是什么原因。。服务器/本地网络状态已经排查过了,没有异常(用别人写的方法测试一切正常,也没有这种偶尔的情况)
或者说说看有什么可以优化的地方?
展开
 我来答
千古人文
2016-08-14 · TA获得超过388个赞
知道小有建树答主
回答量:233
采纳率:93%
帮助的人:88.5万
展开全部
你上面的代码中一共有两个操作,1,向一个url请求数据;2,获得数据,并解析成html。你遇到的响应慢的问题不在你这个代码中,而是在你发起url请求时,url的服务器给你响应的速度。url的服务器可能有数据库的操作或其它耗时操作,当它没有给你返回数据时,你这个方法是阻塞的,并不会立刻返回。
追问
我通过网上其他人封装的方法进行多次测试。并没有卡的情况
追答
为了公平测试,你可以把url换面百度的,它对你的响应应该是平衡的。就可以测试出更慢了,然后再确认问题,不过目前从你的代码看,这里是不会引起慢的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式