2014-12-11 1 views
0

FtpWebRequest을 사용하여 FTP 연결을 설정하려고합니다. 내가 처음으로 CONNECT 명령을 보내야 오징어 프록시 서버를 통해 연결을해야합니다.CONNECT 메서드를 사용하여 HTTP 프록시를 통해 FtpWebRequest를 설정하십시오.

아래 코드를 시도했지만 프록시 서버에 대한 요청이 GET인데 거부합니다.

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" +server); 
request.Credentials = new NetworkCredential(user, pwd); 
var webproxy = new WebProxy(new Uri("http://" + proxy+ ":" + proxyPort)); 
webproxy.UseDefaultCredentials = true; 
request.Proxy = webproxy; 
request.UsePassive = true; 
request.Method = WebRequestMethods.Ftp.ListDirectory; 

FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

나는 프록시를 통해 내 연결을 설정하기 위해 FtpWebRequest을 사용할 수있는 방법이 있습니까?

그렇지 않다면 사용할 수있는 좋은 .NET FTP 클라이언트를 알고 있습니까? 도움 주셔서 대단히 감사합니다.

답변

0

FtpWebRequest는 "세션없는"클라이언트이므로 연결되어있는 동안 원격 끝과 상호 작용할 수 없습니다. FtpWebRequest.cs의 코드를 살펴본 결과 "CONNECT"명령을 보내는 방법을 알 수 없습니다.

"CONNECT"명령이 표준 FTP 명령 세트의 일부로 보이지 않으므로 FTP 라이브러리가 수행해야하는 작업에 맞게 두뇌를 감쌀 수 없습니다.

내가 사용하는 세션 지향적 인 좋은 무료 FTP 클라이언트는 http://sshnet.codeplex.com/에서 "SSH.NET Library"이지만 SSHP 만 지원한다고 생각합니다. FtpWebRequest는 ftps와 ftp를 지원합니다. FTP 서버가 sftp를 지원하는지 확인하고 SSH.NET을 사용할 수 있습니다. 유일한 옵션이 ftps 인 경우 무료 .net ftps 클라이언트를 찾기 위해 오랜 시간을 보냈으며 FtpWebRequest를 사용하여 나왔습니다.

+0

FileZilla를 먼저 연결 문을 전송 지원 (내가 WinSCP에의 저자 해요). 속성에 일반 프록시 서버를 설정할 때 선택할 수있는 옵션 중 하나입니다. 이것은 내가 CONNECT 메소드를 사용하는 것이 프록시 서버를 통해 연결하는 몇 가지 표준 방법이라고 가정했다. 그러나 우리의 인프라 부서와 약간의 대화를 나누면 내 문제가 해결되었습니다. 그들은 프록시 서버를 사용하지 않고 FTP 서버에 직접 연결할 수 있도록 프록시 서버에 대한 면제를 허용했습니다. – AOL

0

FtpWebRequest은 HTTP 프록시를 지원합니다 (그리고 CONNECT 명령은 해당 지원의 일부 임). 귀하의 코드가 정확합니다.

HTTP 프록시가 업로드를 지원하지 않지만 (다른 모든 작업의 ​​경우). 그래서 당신이 언급하지 않는 동안 실제 문제는 업로드입니다.

HTTP 프록시를 통한 FTP 업로드의 경우 타사 FTP 클라이언트를 사용해야합니다.


WinSCP .NET assembly와 예를 들어, 당신은 사용할 수 있습니다

SessionOptions.AddRawSettings에 대한 옵션에 대한
// Setup session options 
SessionOptions sessionOptions = new SessionOptions 
{ 
    Protocol = Protocol.Ftp, 
    HostName = "example.com", 
    UserName = "user", 
    Password = "mypassword", 
}; 

// Configure proxy 
sessionOptions.AddRawSettings("ProxyMethod", "3"); // HTTP proxy 
sessionOptions.AddRawSettings("ProxyHost", "proxy"); 

using (Session session = new Session()) 
{ 
    // Connect 
    session.Open(sessionOptions); 

    // Upload file 
    string localFilePath = @"C:\path\file.txt"; 
    string pathUpload = "/file.txt"; 
    session.PutFiles(localFilePath, pathUpload).Check(); 
} 

, raw settings를 참조하십시오.

쉽게 WinSCP GUI가 generate C# FTP code template입니다.

WinSCP .NET 어셈블리는 네이티브 .NET 라이브러리가 아닙니다. 콘솔 애플리케이션보다 얇은 .NET 래퍼입니다.

+0

몇 년 전에 내가이 질문을 썼다.우리는 그 말을 바로 잡았습니다. 제대로 기억한다면 방화벽 없이는 예외 처리가되어 프록시없이 클라이언트 FTP 서버에 직접 연결할 수 있습니다. – AOL

관련 문제