Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 下载zip返回SocketException:连接重置_Java_Cookies_Inputstream_Socketexception_Connection Reset - Fatal编程技术网

Java 下载zip返回SocketException:连接重置

Java 下载zip返回SocketException:连接重置,java,cookies,inputstream,socketexception,connection-reset,Java,Cookies,Inputstream,Socketexception,Connection Reset,关于连接的话题有十亿个,我尝试了很多方法下载,但总是失败。当我在我的网络浏览器上禁用cookie时,我无法下载它,因此我认为我的问题在于cookie。 我的程序的功能是提取zip,解析里面的html,使用Jsoup,将内容插入mysql数据库并加载到JApplet上。除了自动下载部分外,其他一切都正常工作,我必须在我的web浏览器中手动下载 我正在使用cookie,它在 read.CookieManager.storeCookies(CookieManager.java:89) 与Cookie类

关于连接的话题有十亿个,我尝试了很多方法下载,但总是失败。当我在我的网络浏览器上禁用cookie时,我无法下载它,因此我认为我的问题在于cookie。 我的程序的功能是提取zip,解析里面的html,使用Jsoup,将内容插入mysql数据库并加载到JApplet上。除了自动下载部分外,其他一切都正常工作,我必须在我的web浏览器中手动下载

我正在使用cookie,它在

read.CookieManager.storeCookies(CookieManager.java:89)

与Cookie类中的此行相对应

这是下载课上的一个

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:在 DownloadFile.downloadFromUrl(DownloadFile.java:71)

与代码中的此行相关

is = urlConnection.getInputStream();

当我删除Cookie设置代码时,连接重置的错误仍然存在。

请尝试清理代码片段,许多人会懒得阅读包含十几行有意义代码的整个类。您是否使用与浏览器发送的完全相同的用户代理?是的。我使用firefox插件用户代理切换器0.7.3来测试这是否是问题所在,下载对它们都起到了作用。当你不做任何输出时,为什么要将doOutput设置为true?将请求从GET转换为POST。那是你真正想要的吗?事实上不是。但移除这些并不能解决问题
is = urlConnection.getInputStream();