Java HttpUrlConnection有时工作得太慢
我用我的代码从URL下载文件。下载文件效果很好。但有时我会遇到问题。下面是代码Java HttpUrlConnection有时工作得太慢,java,http,proxy,httpurlconnection,Java,Http,Proxy,Httpurlconnection,我用我的代码从URL下载文件。下载文件效果很好。但有时我会遇到问题。下面是代码 System.setProperty("https.proxyHost",myproxy); System.setProperty("https.proxyPort","80"); URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setConnectTimeout(5000);
System.setProperty("https.proxyHost",myproxy);
System.setProperty("https.proxyPort","80");
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setConnectTimeout(5000);
con.setReadTimeout(10000);
int responseCode = con.getResponseCode();
InputStream is = con.getInputStream();
System.out.println("Inputstream done");
FileOutputStream fos = fos = new FileOutputStream("D:\\tryfile\\file1.csv");
byte[] buffer = new byte[4096]; //declare 4KB buffer
int len;
while ((len = is.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
is.close();
通常,该代码会在1到2秒内下载文件,并且工作正常。但有时下载同一文件需要3到4分钟
例如,我一个接一个地发送了4个HTTP请求。通常它没有问题。它发送了4个HTTP请求并从4个不同的URL下载了4个文件
但有时第一个请求需要等待3或4分钟才能工作。在等待3或4分钟后,它会从url获得响应并完美地下载文件,而在所有第二、第三和第四个请求都完美地工作并在2秒钟内下载文件之后(所以唯一的问题是为什么有时它在第一个请求中等待3或4分钟)
它只是偶尔发生。我不知道为什么。当它发生时,连接和读取超时不起作用。它会等待3或4分钟,不会出现take timeout异常
我调试代码,我认为当代码开始等待时,它会发生在那一行
- int responseCode=con.getResponseCode()李>
非常有趣的是,这个问题只会偶尔出现,而且只会在第一次请求中出现。如果只是第一次请求,可能是dns查找问题(不确定),请在目标ip上尝试相同的方法,以确保我不理解您的意思。请添加一些更详细的信息。假设url是
abcd.com
,所以系统首先必须找出哪个ip映射到这个域,这意味着dns查找。由于客户端缓存第一次查找,因此如果第一次请求耗时,这将是因为dns查找。那么,我可以从代码中做些什么,或者我可以为这个问题做些什么?没有任何逻辑和可靠的方法,请先尝试将您的dns服务器更改为google公共dns服务器(8.8.8.8),通常这会有所帮助。另一种不好的方法是直接通过其ip调用域,而不是不推荐的域名,但由于其ip,它将跳过dns查找。