2012-01-12 3 views
4

以下のコードを使用してFTPサイトからファイルを取得する。私のコンピュータでは動作しますが、別のコンピュータでHTMLコードを実行するとHTMLコードが返されます(ブラウザでFTPにアクセスするとHTMLがWebページのコードであることがわかります)。どうしましたか?FTPからファイルリストを読み込むのにC#(FtpWebResponse)を使用したいが、HTMLを返す

public String GetFilesAsString(string folder,string fileExtension) 
{ 
    StringBuilder result = new StringBuilder(); 
    FtpWebRequest reqFTP; 
    try 
    { 
     String ftpserver = ftp + folder+"/"; 

     reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpserver)); 
     reqFTP.UsePassive = false; 
     reqFTP.UseBinary = true; 
     reqFTP.Credentials = new NetworkCredential(username, password); 
     reqFTP.Method = WebRequestMethods.Ftp.ListDirectory; 
     FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); 

     StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8); 
     string line = ""; 

     while (reader.Peek()>-1) 
     { 
      line = reader.ReadLine(); 
      Console.WriteLine(line);//**********HTML was wrote out here************* 
     } 

     if (result.ToString().LastIndexOf('\n') >= 0) 
      result.Remove(result.ToString().LastIndexOf('\n'), 1); 
     reader.Close(); 
     response.Close(); 

     return result.ToString(); 
    } 
    catch (Exception ex) 
    { 
    } 
    return null; 
} 

enter image description here

答えて

5

それが妨害ウェブプロキシだろうか?次を使用してプロキシを回避するようにしてください:

reqFTP.Proxy = GlobalProxySelection.GetEmptyWebProxy(); 
+0

ビンゴ! Thorstenの答えで修正されました。 私はreqFTP.Proxy = nullを使用します。 GlobalProxySelectionの代わりに、それが廃止されたことを知らせるためです。ありがとう! – Alan

1

これは、HTTPプロキシを介しFtpWebRequestを使用した結果です。ファイルリストには、リスト内の個々のファイルへのハイパーリンクを持つ<A>というHTMLタグが付いています。

プロキシをバイパスすることができない場合は、我々の場合には、囲む<PRE>要素のうち、ファイルの内容でセクションをこすりXmlDocumentにロードし、.SelectNodes("//A/text()")

てファイルリストを引き出すことができました
1

私は解決策を見つけた:デフォルトのプロキシが予期せず

有効になっていました、私は今、configファイル使用して、具体的にそれを無効にする必要があります:実際に

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.net> 
    <defaultProxy enabled="false" useDefaultCredentials="true"/> 
    </system.net> 
</configuration> 

を、それが再びです.NET問題!

0

FTPダウンロードするPassiveModeが必要、アップロード...

代わりに、使用しよう:

reqFTP.UsePassive = true; 
関連する問題