关于 Connection 的话题有十亿个,我尝试了很多方法来下载这个文件,但总是失败。当我在我的网络浏览器上禁用 cookie 时,我无法下载它,因此我认为我的问题出在 cookie 上。我的程序的功能是提取zip,解析里面的html,用Jsoup,将内容插入mysql数据库并加载到JApplet。除了自动下载部分,一切都在工作,我必须在我的网络浏览器中手动下载。
我正在使用这个类作为cookie,它返回错误
读取.CookieManager.storeCookies(CookieManager.java:89)
对应于 Cookie 类中的这一行
for (int i=1; (headerName = conn.getHeaderFieldKey(i)) != null; i++) {
这个来自下载类
cm.storeCookies(urlConnection);
下载方式
public static void main(String args[]) throws Exception {
downloadFromUrl("http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_mgsasc.zip", "Mozilla", "C:/", "D_mgsasc.zip", true);
}
public static void downloadFromUrl(String srcAddress, String userAgent, String destDir, String destFileName, boolean overwrite) throws Exception
{
InputStream is = null;
FileOutputStream fos = null;
try {
CookieManager cm = new CookieManager();
URL url = new URL(srcAddress);
URLConnection urlConnection = url.openConnection();
urlConnection.setRequestProperty("User-Agent", userAgent);
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setConnectTimeout(30000);
urlConnection.setReadTimeout(30000);
urlConnection.setUseCaches(true);
urlConnection.connect();
cm.storeCookies(urlConnection);
cm.setCookies(url.openConnection());
is = urlConnection.getInputStream();
fos = new FileOutputStream(destFile);
byte[] buffer = new byte[1024];
int len, totBytes = 0;
while((len = is.read(buffer)) > 0)
{
totBytes += len;
fos.write(buffer, 0, len);
}
fos.flush();
fos.close();
}
}
*
更新,删除了不必要的代码
*
返回以下错误
java.net.SocketException:zip.DownloadFile.downloadFromUrl 处的连接重置(DownloadFile.java:71)
与代码中的这一行相关
is = urlConnection.getInputStream();
当我删除 cookie 设置代码时,连接重置的相同错误仍然存在。