如何使用 .NET Core (FtpWebRequest) 通过 squid 代理通过 FTP 获取文件?
How to fetch file by FTP via squid proxy using .NET Core (FtpWebRequest)?
根据 https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest.proxy?view=netcore-3.1 FtpWebRequest
不支持 .NET Core 代理。有其他选择吗?
我需要通过代理身份验证 (NTLM) 通过一些 squid 代理(即 FTP 通过 HTTP)访问 FTP 文件。
这是示例代码:
FtpWebRequest request = (FtpWebRequest) WebRequest.Create("ftp://ftp.ubuntu.com/");
var proxy = new WebProxy("my.squid.host", 8080);
proxy.Credentials = new NetworkCredential("squid_user", "squid_pass");
request.Proxy = proxy;
WebResponse response = request.GetResponse();
var result = new StreamReader(response.GetResponseStream()).ReadToEnd();
Console.WriteLine(result);
如果您将此代码中的 squid host/user/pass 替换为您的代码,您会发现它在这个 csproj 文件中运行良好:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
</Project>
但它不再适用于 .NET Core:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
</Project>
除了 FtpWebRequest
,.NET Framework 中没有其他 FTP 实现。并且 FtpWebRequest
本身已被弃用,不会得到改进。您必须使用第 3 方 FTP 客户端库。
参见:
- https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest#remarks 和
- https://github.com/dotnet/platform-compat/blob/master/docs/DE0003.md (which points to Free FTP Library)
一般情况下,可以使用FluentFTP or my WinSCP .NET assembly。
虽然两者都不支持 NTLM 身份验证(您稍后添加的要求)。我不知道有任何其他广泛使用的免费 .NET FTP 库。
根据 https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest.proxy?view=netcore-3.1 FtpWebRequest
不支持 .NET Core 代理。有其他选择吗?
我需要通过代理身份验证 (NTLM) 通过一些 squid 代理(即 FTP 通过 HTTP)访问 FTP 文件。
这是示例代码:
FtpWebRequest request = (FtpWebRequest) WebRequest.Create("ftp://ftp.ubuntu.com/");
var proxy = new WebProxy("my.squid.host", 8080);
proxy.Credentials = new NetworkCredential("squid_user", "squid_pass");
request.Proxy = proxy;
WebResponse response = request.GetResponse();
var result = new StreamReader(response.GetResponseStream()).ReadToEnd();
Console.WriteLine(result);
如果您将此代码中的 squid host/user/pass 替换为您的代码,您会发现它在这个 csproj 文件中运行良好:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
</Project>
但它不再适用于 .NET Core:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
</Project>
除了 FtpWebRequest
,.NET Framework 中没有其他 FTP 实现。并且 FtpWebRequest
本身已被弃用,不会得到改进。您必须使用第 3 方 FTP 客户端库。
参见:
- https://docs.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest#remarks 和
- https://github.com/dotnet/platform-compat/blob/master/docs/DE0003.md (which points to Free FTP Library)
一般情况下,可以使用FluentFTP or my WinSCP .NET assembly。
虽然两者都不支持 NTLM 身份验证(您稍后添加的要求)。我不知道有任何其他广泛使用的免费 .NET FTP 库。