【问题标题】:Unable to download file from internet behind a proxy无法通过代理从 Internet 下载文件
【发布时间】:2012-06-02 21:35:36
【问题描述】:

我的应用程序访问互联网以从给定链接下载文件。我正在使用我研究所的互联网连接,它使用代理设置。

为了让我的应用程序能够从 Internet 下载文件,我需要打开我的 Internet 浏览器,提供连接的用户名和密码并保持浏览器运行,然后我的应用程序才能下载完整的文件,如果我不要做这些事情我的应用程序正常运行并在所需位置创建文件但显示文件大小为零,这很可能是因为它无法直接连接到互联网。

如何让我的应用程序向我显示一个对话框,询问用户名和密码以连接到互联网,如果它无法连接。

谢谢:-)

【问题讨论】:

    标签: android proxy download


    【解决方案1】:

    我开发了这个逻辑,它需要做很多工作,但它有助于我检测是否存在代理或其他问题,因为普通的互联网连接管理器无法检测是否需要身份验证。

     final ConnectivityManager conMgr =  (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
      final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
    
                if (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED) {
    
                                //Do what ever you wish to do
    
                                } else {
                                      // Display message internet connection not available
                                      }
    

    上面的代码提供了有关互联网连接是否可用的信息,但它不知道互联网连接是否需要身份验证,因此在检查上述条件后,我尝试访问下载链接,然后使用此逻辑。

    这个stackoverflow查询(If internet requires authentication for actually connecting to be able to download?)中提到了我使用的逻辑......希望这些信息对有需要的人有所帮助。

    【讨论】:

      【解决方案2】:

      当您创建将通过其实现文件传输的连接对象时,您必须指定您正在使用代理所期望的任何形式的身份验证凭据。我不知道你会在 Java for Android 中做什么,但在 .NET 中我会这样做:

        LogHandler.Log(LogHandler.LogType.Debug, "Configure proxy credentials");
      
        // Proxy address and port
        ec2Config.ProxyHost = ConfigurationManager.AppSettings["LocalProxyHost"];
        ec2Config.ProxyPort = Convert.ToInt32(ConfigurationManager.AppSettings["LocalProxyPort"]);
      
        // Create a dummy webrequest so we can set proxy credentials (to stop the proxy spitting 407s at us)
        HttpWebRequest dummyRequest = (HttpWebRequest)WebRequest.Create(ec2Config.ServiceURL);
        dummyRequest.Proxy.Credentials = CredentialCache.DefaultCredentials;
      
        #pragma warning disable 168
        HttpWebResponse myHttpWebResponse = (HttpWebResponse)dummyRequest.GetResponse();
        #pragma warning restore 168
      

      【讨论】:

      • 抱歉,但我对如何在 Java 中为我的应用程序实现这一点也不太了解...感谢您的时间...我真的很感激 :-)
      猜你喜欢
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 2016-03-22
      • 2017-07-04
      • 1970-01-01
      • 2013-09-20
      • 2016-09-04
      • 1970-01-01
      相关资源
      最近更新 更多