ftp应用程序出错:"远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)"

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ftp应用程序出错:"远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)"相关的知识,希望对你有一定的参考价值。

各位大神,C#开发ftp应用程序碰到点问题,程序在开发环境下,正常调试,执行都没有问题,但是生成解决方案后,Debug文件夹下运行就出现错误,错误提示为:“远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)。”
能否指点一下,到底为什么会出现这种问题?

可能是如下原因:
1.URL路径不对,看看有没有多加空格,或者大小写问题
2.权限是否足
3.需要反复连接的时候,如GetFileList,需要递归获得所有文件,keepAlive则设成false,一个查询请求完了后就关闭.
参考技术A 如果你有外部文件,而外部文件的属性是“不复制”,那么就会出现这种情况,我猜的。另外,可能就是权限的问题了。检查一下工程内的文件,有没有在Debug的时候缺文件的情况,另外,最好能把异常记录下来,这样能够看到是哪里出的问题。 参考技术B 是不是用了,文件流,操作 xml 文档了 如果是的话 用这个xmlDoc.Load(HttpContext.Current.Server.MapPath(@"~/data.xml")); 参考技术C 是不是缺少类库的支持!追问

可是正常调试,执行都没问题啊,类库的DLL文件也都在debug文件里了。

参考技术D 访问权限问题追问

debug里运行和直接执行,权限不一样么,具体要怎么调整权限。

追答

一个是vs开发环境的权限 一个是 exe程序的权限 你把ftp文件夹 权限设为 everyone

本回答被提问者采纳

获取“远程服务器返回错误:(403)禁止”错误无论我做啥

【中文标题】获取“远程服务器返回错误:(403)禁止”错误无论我做啥【英文标题】:Getting "The remote server returned an error: (403) Forbidden" Error Whatever I Do获取“远程服务器返回错误:(403)禁止”错误无论我做什么 【发布时间】:2020-09-02 05:20:50 【问题描述】:

我收到“远程服务器返回错误:(403) Forbidden。”每次我向网站发出请求时都会出错。我还尝试了在发出请求时在浏览器上看到的每个标头,但我仍然收到相同的错误。我应该怎么做才能解决这个错误?这是 .NET Core 3 上的控制台应用程序。

        var url = "my-url";
        var client = new WebClient();
        client.Headers.Add("User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");
        client.Headers.Add("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); 
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        var html = client.DownloadString(url);

未处理的异常。 System.Net.WebException:远程服务器 返回错误:(403) Forbidden.

【问题讨论】:

我认为这取决于您粘贴的网址。也许有一些令牌网站用于对抗机器人活动或某些东西 如果有,我可以在浏览器中检查时在请求标头中看到它们吗? 你应该,是的。也没有发送 cookie 吗? 你可以试试这个而不是 WebClient,HttpClient client = new HttpClient(new HttpClientHandler() ServerCertificateCustomValidationCallback = delegate return true; ); @Xerillio 是的。我尝试了所有这些,但仍然返回 403。 【参考方案1】:

发生这种情况的原因很可能是您的目标网站实施了一些网络抓取对策。

为了绕过它,您应该尽可能模拟真实的浏览器。这将通过设置必要的标题来实现。

client.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml");
client.Headers.Add("Accept-Encoding", "gzip, deflate");
client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
client.Headers.Add("Accept-Charset", "ISO-8859-1");

以上是浏览器使用的一些基本标头,尝试一下,如果仍然不起作用,我建议继续关注该方向。

第二步:

使用任何类型的网络代理(如 Fiddler)从您的浏览器访问此网站,并拦截请求中的标头。然后在您的应用程序中模仿它们。这应该 100% 有效。

【讨论】:

或者你可以,你知道,尊重网站的意愿而不是刮掉它...... 我将我在浏览器中看到的每一个请求标头都添加到了我的代码中,但我仍然得到 403。我在 Fiddler 中尝试了同样的事情,但不知何故我得到了 200。我不知道我错过了什么。 如果 Fiddler 在做,你的代码也可以做!一些小事正在转移你的注意力。三重检查一切。

以上是关于ftp应用程序出错:"远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)"的主要内容,如果未能解决你的问题,请参考以下文章

C# 从FTP下载文件报错: 远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。

"/K3WEB"应用程序中的服务器错误.远程服务器返回错误: (404) 未找到

c#远程抓取出现"远程服务器返回错误: (404) 未找到。"

写自动更新程序出现"远程服务器返回错误: (404) 未找到"

navicat 连接mysql时1045出错怎么办

java程序在linux系统下运行上传文件到ftp服务器出错代码 “451 参数错误”