ftp request through ftp proxy

S

squall

Hi,
I have to upload files on a ftp server through a ftp proxy with
Dotnet.
I have a 'System.InvalidOperationException' with this message : "The
requested FTP command is not supported when using HTTP proxy". Is
there a solution to use a FTP proxy and not a HTTP proxy ?

Thanks
Marc

My code (in CLI/C++, but the same in C#) :

// Get the object used to communicate with the server.
FtpWebRequest^ request = (FtpWebRequest^)WebRequest::Create("ftp://
xxx.xxx.com"); // Uri of ftp server
request->Method = WebRequestMethods::Ftp::UploadFile;

// FTP Proxy
request->Proxy = gcnew WebProxy("ftpProxyHostname", 21);

request->Credentials = gcnew
NetworkCredential("ftpServerUser","password");

// Copy the contents of the file to the request stream.
StreamReader^ sourceStream = gcnew StreamReader(exportDirectory +
zipName);
array said:
ReadToEnd());
sourceStream->Close();
request->ContentLength = fileContents->Length;

Stream^ requestStream = request->GetRequestStream();
requestStream->Write(fileContents, 0, fileContents->Length);
requestStream->Close();

FtpWebResponse^ response = (FtpWebResponse^)request->GetResponse();
 
N

Nicholas Paldino [.NET/C# MVP]

The documentation for the Proxy property on the FtpWebRequest class
states:

The FtpWebRequest class supports HTTP and ISA Firewall Client proxies.

This leads me to believe that these are the only proxies it supports.

Also, when using an HTTP proxy, you are limited to the methods that you
can use:

If the specified proxy is an HTTP proxy, only the DownloadFile,
ListDirectory, and ListDirectoryDetails commands are supported.

I don't know if it supports an FTP proxy, but you might try and create a
URI with the FTP scheme, address, and port, and pass that to your WebProxy
instance and see if that works.
 
S

squall

Thanks for your response.
I tried your solution, but it doesn't work, I have this message :
'System.NotSupportedException', "ftp scheme proxies are not supported
by ServicePointManager". (I hope this is a good traduction, I'm french
and my Visual Studio is in French :) )
Do you know another class instead of FtpWebRequest, allowing me to do
a ftp request through a ftp proxy ?

The documentation for the Proxy property on the FtpWebRequest class
states:

The FtpWebRequest class supports HTTP and ISA Firewall Client proxies.

This leads me to believe that these are the only proxies it supports.

Also, when using an HTTP proxy, you are limited to the methods that you
can use:

If the specified proxy is an HTTP proxy, only the DownloadFile,
ListDirectory, and ListDirectoryDetails commands are supported.

I don't know if it supports an FTP proxy, but you might try and create a
URI with the FTP scheme, address, and port, and pass that to your WebProxy
instance and see if that works.

--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)


Hi,
I have to upload files on a ftp server through a ftp proxy with
Dotnet.
I have a 'System.InvalidOperationException' with this message : "The
requested FTP command is not supported when using HTTP proxy". Is
there a solution to use a FTP proxy and not a HTTP proxy ?

My code (in CLI/C++, but the same in C#) :
// Get the object used to communicate with the server.
FtpWebRequest^ request = (FtpWebRequest^)WebRequest::Create("ftp://
xxx.xxx.com"); // Uri of ftp server
request->Method = WebRequestMethods::Ftp::UploadFile;
// FTP Proxy
request->Proxy = gcnew WebProxy("ftpProxyHostname", 21);
request->Credentials = gcnew
NetworkCredential("ftpServerUser","password");
// Copy the contents of the file to the request stream.
StreamReader^ sourceStream = gcnew StreamReader(exportDirectory +
zipName);

sourceStream->Close();
request->ContentLength = fileContents->Length;
Stream^ requestStream = request->GetRequestStream();
requestStream->Write(fileContents, 0, fileContents->Length);
requestStream->Close();
FtpWebResponse^ response = (FtpWebResponse^)request->GetResponse();
 
N

Nicholas Paldino [.NET/C# MVP]

squall,

I don't know of another class that will let you use an FTP proxy, at
least in the framework. You will probably have to look for some third-party
provider in order to find something that will allow you to do this.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

squall said:
Thanks for your response.
I tried your solution, but it doesn't work, I have this message :
'System.NotSupportedException', "ftp scheme proxies are not supported
by ServicePointManager". (I hope this is a good traduction, I'm french
and my Visual Studio is in French :) )
Do you know another class instead of FtpWebRequest, allowing me to do
a ftp request through a ftp proxy ?

The documentation for the Proxy property on the FtpWebRequest class
states:

The FtpWebRequest class supports HTTP and ISA Firewall Client proxies.

This leads me to believe that these are the only proxies it supports.

Also, when using an HTTP proxy, you are limited to the methods that
you
can use:

If the specified proxy is an HTTP proxy, only the DownloadFile,
ListDirectory, and ListDirectoryDetails commands are supported.

I don't know if it supports an FTP proxy, but you might try and
create a
URI with the FTP scheme, address, and port, and pass that to your
WebProxy
instance and see if that works.

--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)


Hi,
I have to upload files on a ftp server through a ftp proxy with
Dotnet.
I have a 'System.InvalidOperationException' with this message : "The
requested FTP command is not supported when using HTTP proxy". Is
there a solution to use a FTP proxy and not a HTTP proxy ?

My code (in CLI/C++, but the same in C#) :
// Get the object used to communicate with the server.
FtpWebRequest^ request = (FtpWebRequest^)WebRequest::Create("ftp://
xxx.xxx.com"); // Uri of ftp server
request->Method = WebRequestMethods::Ftp::UploadFile;
// FTP Proxy
request->Proxy = gcnew WebProxy("ftpProxyHostname", 21);
request->Credentials = gcnew
NetworkCredential("ftpServerUser","password");
// Copy the contents of the file to the request stream.
StreamReader^ sourceStream = gcnew StreamReader(exportDirectory +
zipName);
array<Byte>^ fileContents = Encoding::UTF8->GetBytes(sourceStream-
ReadToEnd());
sourceStream->Close();
request->ContentLength = fileContents->Length;
Stream^ requestStream = request->GetRequestStream();
requestStream->Write(fileContents, 0, fileContents->Length);
requestStream->Close();
FtpWebResponse^ response = (FtpWebResponse^)request->GetResponse();
 
S

squall

Hi,
Finally I use a batch file (.bat) called in my code.
It's not a very good solution, but it work !
Thanks for your help

squall,

I don't know of another class that will let you use an FTP proxy, at
least in the framework. You will probably have to look for some third-party
provider in order to find something that will allow you to do this.

--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)


Thanks for your response.
I tried your solution, but it doesn't work, I have this message :
'System.NotSupportedException', "ftp scheme proxies are not supported
by ServicePointManager". (I hope this is a good traduction, I'm french
and my Visual Studio is in French :) )
Do you know another class instead of FtpWebRequest, allowing me to do
a ftp request through a ftp proxy ?
The documentation for the Proxy property on the FtpWebRequest class
states:
The FtpWebRequest class supports HTTP and ISA Firewall Client proxies.
This leads me to believe that these are the only proxies it supports.
Also, when using an HTTP proxy, you are limited to the methods that
you
can use:
If the specified proxy is an HTTP proxy, only the DownloadFile,
ListDirectory, and ListDirectoryDetails commands are supported.
I don't know if it supports an FTP proxy, but you might try and
create a
URI with the FTP scheme, address, and port, and pass that to your
WebProxy
instance and see if that works.
--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

Hi,
I have to upload files on a ftp server through a ftp proxy with
Dotnet.
I have a 'System.InvalidOperationException' with this message : "The
requested FTP command is not supported when using HTTP proxy". Is
there a solution to use a FTP proxy and not a HTTP proxy ?
Thanks
Marc
My code (in CLI/C++, but the same in C#) :
// Get the object used to communicate with the server.
FtpWebRequest^ request = (FtpWebRequest^)WebRequest::Create("ftp://
xxx.xxx.com"); // Uri of ftp server
request->Method = WebRequestMethods::Ftp::UploadFile;
// FTP Proxy
request->Proxy = gcnew WebProxy("ftpProxyHostname", 21);
request->Credentials = gcnew
NetworkCredential("ftpServerUser","password");
// Copy the contents of the file to the request stream.
StreamReader^ sourceStream = gcnew StreamReader(exportDirectory +
zipName);
array<Byte>^ fileContents = Encoding::UTF8->GetBytes(sourceStream-
ReadToEnd());
sourceStream->Close();
request->ContentLength = fileContents->Length;
Stream^ requestStream = request->GetRequestStream();
requestStream->Write(fileContents, 0, fileContents->Length);
requestStream->Close();
FtpWebResponse^ response = (FtpWebResponse^)request->GetResponse();
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top