.Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy

系统环境:

Windows + .Net Framework 4.0

问题描述:

C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的;异常报错的信息:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy

分析过程:

在网上搜索到的解决方案,基本都是将代理置为null:request.Proxy = null; 并没有解释其原因。

调试发现,如果不去主动设置Proxy,创建request对象后(request = (FtpWebRequest)WebRequest.Create(uri)),其默认的Proxy就是null,不解。。。

如下是查找相关资料,得到的解释:

.NET Framework 上

Proxy属性标识IWebProxy与 FTP 服务器进行通信的实例。 代理的设置是由系统使用的配置文件和 Internet Explorer 本地网络设置。 若要指定应使用任何代理,请设置Proxy返回的代理实例到GlobalProxySelection.GetEmptyWebProxy方法。

必须设置Proxy之前将数据写入到请求的流或获取响应。 更改Proxy后调用GetRequestStream, BeginGetRequestStream, GetResponse,或BeginGetResponse方法使InvalidOperationException异常。

FtpWebRequest类支持 HTTP 和 ISA 防火墙客户端代理。

如果指定的代理是 HTTP 代理,则仅DownloadFile, ListDirectory,和ListDirectoryDetails支持命令。

上述说明,基本已经解释了异常的原因。但是既然代码中并未指定代理,但是实际缺使用了HTTP代理,结合有的电脑没问题有的电脑有问题现象,猜测应该是电脑设置或网络设置问题。如下是“自动检测代理”的说明,基本可以解释:

自动代理检测是一个进程,系统使用该进程来标识 Web 代理服务器,并用于代表客户端发送请求。 此功能也称为 Web 代理自动发现 (WPAD)。 启用自动代理检测后,系统会尝试查找代理配置脚本,该脚本负责返回一组可用于请求的代理。 如果找到了代理配置脚本,则会在针对使用 WebProxy 实例的请求获取代理信息、请求流或响应时,在本地计算机上下载、编译并运行该脚本。

自动代理检测由 WebProxy 类执行,且可采用请求级设置、配置文件中的设置和通过 Internet Explorer“局域网(LAN)”对话框指定的设置。

启用自动代理检测后,WebProxy 类会尝试按如下方式找到代理配置脚本:

  1. WinINet InternetQueryOption 函数用于查找 Internet Explorer 最近检测到的代理配置脚本。
  2. 如果找不到该脚本,WebProxy 类将使用动态主机配置协议 (DHCP) 查找该脚本。 DHCP 服务器可以采用脚本的位置(主机名)或脚本的完整 URL 进行响应。
  3. 如果 DHCP 未标识 WPAD 主机,则查询 DNS 以找到 WPAD 作为其名称或别名的主机。
  4. 如果未标识该主机,并且代理配置脚本的位置由 Internet Explorer LAN 设置或配置文件指定,则使用此位置。

默认情况下,Internet Explorer 代理设置用于检测此代理。 如果应用程序基于非交互式帐户运行(没有用于配置 IE 代理设置的简便方法),或要使用不同于 IE 设置的代理设置,则可以通过创建定义了 <defaultProxy> 元素(网络设置)和 <proxy> 元素(网络设置)元素的配置文件,对代理进行配置。

对于所创建的请求,可通过将空 Proxy 用于该请求,禁用请求级别的自动代理检测,如下面的代码示例所示。

public static void DisableForMyRequest (Uri resource)
{
    WebRequest request = WebRequest.Create (resource);
    request.Proxy = null;
    WebResponse response = request.GetResponse ();
}  

结合上述解释,在问题电脑上,将自动检测代理关闭后,测试正常。

原文地址:https://www.cnblogs.com/Juning/p/11392683.html

时间: 2024-10-11 16:11:30

.Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy的相关文章

.NET下载文件报错System.UnauthorizedAccessException的解决方法

转自原文.NET下载文件报错System.UnauthorizedAccessException的解决方法 假设VS代码对应路径为E:\Projects\Web1,在VS用“发布Web”的方式发布后的路径为E:\Site\Web1.在IIS新建2个站点,站点A指向E:\Projects\Web1,站点B指向E:\Site\Web1. 现在出现一个异常情况,站点B能正常下载123.xls,站点A下载时却提示错误: System.UnauthorizedAccessException: 对路径“E:

ASP.NET MVC页面报错System.InvalidOperationException The view found at &#39;~/Views/Home/Index.cshtml&#39; was not created.

Application Exception System.InvalidOperationException The view found at '~/Views/Home/Index.cshtml' was not created. Description: HTTP 500.Error processing request. Details: Non-web exception. Exception origin (name of application or object): System

用icas下载文件报错

前段时间服务器升级,过程中测试到报表下载,报表下载要用到icas,用的是sdts-client.jar,但是此jar包有两种连接模式,分别为: 1 public static final SdtsConnectMode ACTIVE = new SdtsConnectMode();//主动 2 public static final SdtsConnectMode PASV = new SdtsConnectMode();//被动 原来用的是主动模式[ACTIVE],应用服务器和下载服务器之间有

IIS 下载文件 报错“401 - 未授权: 由于凭据无效,访问被拒绝。”

点开身份验证 改为启用就OK了 重启一下IIS. 如果你上在办法没有解决可参考 1.打开"IIS信息服务管理器"-->选择你发布的网站-->选择功能视图中的"身份验证"-->右键匿名身份验证,选择"编辑",选择"特定用户IUSR":2.右键要发布的网站文件夹,选择"安全"-->"编辑"-->"添加"-->"高级"

c#.net从ftp下载文件到本地

c#.net从ftp下载文件到本地    /*首先从配置文件读取ftp的登录信息*/ string TempFolderPath = System.Configuration.ConfigurationManager.AppSettings["TempFolderPath"].ToString(); string FtpUserName = System.Configuration.ConfigurationManager.AppSettings["FtpUserName&q

vnc连接kali 2.0 报错:A problem has occurred and the system can&#39;t recover.

kali版本: [email protected]:~# uname -a Linux kali 4.3.0-kali1-amd64 #1 SMP Debian 4.3.3-7kali2 (2016-01-27) x86_64 GNU/Linux 第一步 安装相关源: apt-get install mate-core mate-desktop-environment mate-desktop-environment-extra 第二步 启动vncserver: [email protected

连接私服仓库maven的pom文件报错:Project build error: Non-resolvable parent POM

配置了私服maven仓库,在内网160服务器上,修改了maven配置文件.下载了一个项目,pom文件报错 问题如图:         将<version>1.5.13.RELEASE</version>改成<version>2.0.1.RELEASE</version> 在更新项目 选中项目右击->maven->update project 刷新160上的私服网页看到jar包下载了 参考:https://blog.csdn.net/zyp6309

java实现FTP下载文件

ftp上传下载文件,是遵照ftp协议上传下载文件的,本例仅以下载文件为例. 重要的方法解释: 1.FTP功能相关依赖路径:org.apache.commons.net.ftp.*: 2.ftp默认端口是21,如果非默认端口连接,需指定:ftp.connect(ftphostaddr, 22);//22为端口号 3.ftp.changeWorkingDirectory(ftppath) //实现切换目录 4.FTPFile[] fs = ftp.listFiles(); 获取指定目录下的文件列表

java ftp下载文件

1.使用官方正规的jar commons-net-1.4.1.jar jakarta-oro-2.0.8.jar 注意:使用ftp从windows服务器下载文件和从linux服务器下载文件不一样 2.用ftp从linux服务器下载文件 System.out.println(new Date()+" 开始进入ftpDownload定时器"); //ftp服务器登录凭证 String host=PropertiesManager.getProperty("ftpHost"