none
FTPでファイル一覧取得 RRS feed

  • 質問

  • 下記のスクリプトでファイル一覧は取得できるのですが、プロキシの設定で

    取得した結果形式が異なります。

    原因がわかりません。なにか原因となる可能性があれば教えてください。

    #$ftpReq.Proxyの設定内容で、形式結果が異なります。

    ======

    $ftpReq = [System.Net.FtpWebRequest]::Create("ftp://xxx.com/public_html/")
    $ftpReq.Credentials = New-Object System.Net.NetworkCredential("user","pass")
    $ftpReq.Method = [System.Net.WebRequestMethods+ftp]::ListDirectory
    $ftpReq.KeepAlive = $false
    $ftpReq.UseBinary = $true
    $ftpReq.UsePassive = $true
    $ftpReq.TimeOut = 10000
    #$ftpReq.Proxy =  [System.Net.WebRequest]::GetSystemWebProxy()
    #$ftpReq.Proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
    $ftpReq.Proxy =  $null

    $ftpRes = [System.Net.FtpWebResponse]$ftpReq.GetResponse()
    $streamReader = New-Object System.IO.StreamReader($ftpRes.GetResponseStream())
    "NLIST STATUS: {0}-{1}" -f $ftpRes.StatusDescription, $streamReader.ReadToEnd()

    $streamReader.Close()
    $ftpRes.Close()

    ===


    $ftpReq.Proxy =  $nullの場合は、ファイル名のみが取得されますが、
    >>NLIST STATUS: 150 Accepted data connection

    下記の設定にすると、HTTPで取得されます。

    $ftpReq.Proxy =  [System.Net.WebRequest]::GetSystemWebProxy()
    $ftpReq.Proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials

    >>NLIST STATUS: OK-<HTML>
    >><meta http-equiv="Content-Type" content="text-html; charset=UTF-8">
    >><HEAD>
    >><TITLE>FTP ディレクトリ /public_html/ - xxx.com </TITLE>


    >>
    >>
    2016年1月19日 0:39

回答

  • 実際に喋るプロトコルが、「クライアント-[http]-Proxy Server-[ftp]-FTP Server」と
    「クライアント-[ftp]-FTP Server」と全然違いますから、それは仕方ないんですよね。
    特にProxy Server側が整形しているなら、それはそういうものとして受け入れるしかないです。

    #FtpWebRequestは(できるかぎり)抽象化しているともいえます。


    jzkey

    • 回答としてマーク Brillia 2016年1月19日 4:08
    2016年1月19日 3:29
  • HTTPプロキシを経由してFTPサーバーに接続した場合、結果がHTTP経由で返却されるのは正しい動作かと思います。

    ファイルリストを得るには、HTTPプロキシが返してくるHTMLを、スクレイピングするしかないかもしれません。

    • 回答としてマーク Brillia 2016年1月19日 4:08
    2016年1月19日 4:05
    モデレータ

すべての返信

  • 実際に喋るプロトコルが、「クライアント-[http]-Proxy Server-[ftp]-FTP Server」と
    「クライアント-[ftp]-FTP Server」と全然違いますから、それは仕方ないんですよね。
    特にProxy Server側が整形しているなら、それはそういうものとして受け入れるしかないです。

    #FtpWebRequestは(できるかぎり)抽象化しているともいえます。


    jzkey

    • 回答としてマーク Brillia 2016年1月19日 4:08
    2016年1月19日 3:29
  • HTTPプロキシを経由してFTPサーバーに接続した場合、結果がHTTP経由で返却されるのは正しい動作かと思います。

    ファイルリストを得るには、HTTPプロキシが返してくるHTMLを、スクレイピングするしかないかもしれません。

    • 回答としてマーク Brillia 2016年1月19日 4:08
    2016年1月19日 4:05
    モデレータ
  • ご返事ありがとうございました。

    りかいできました。

    2016年1月19日 4:08