0

ユーザーをファイルのダウンロードにリダイレクトする PHP スクリプトがあります。このページを Web ブラウザーで表示すると、ファイルを保存する場所を自動的に指定するように求められますSaveFileDialog。.

C# で記述されたアプリケーションを使用してこのファイルをダウンロードしたいと考えています。PHP スクリプトからの応答に含まれるファイルのファイル名と拡張子を取得するにはどうすればよいですか?

PHP変数を読み取る必要があると思いますが、それを読み取る正しい方法が見つかりません。ファイル名と拡張子を格納している PHP 変数は$file$extそれぞれ と です。

ここでいくつかの質問を読みましたが、混乱しています。一部のユーザーは について話しWebClient、他のユーザーは について話しHttpWebRequestます。

正しい方向に私を向けることができますか?

4

1 に答える 1

1

ファイルのダウンロードと保存のプロセスが説明されているこちらをご覧ください。

リクエスト応答ヘッダーからファイル名を取得する方法は次のとおりです。

String header = client.ResponseHeaders["content-disposition"];
String filename = new ContentDisposition(header).FileName;

もう 1 つ注意してください。ここでクライアントは WebClient コンポーネントです。WebClient でダウンロードを使用する方法は次のとおりです。ここにリンクの説明を入力してください

------完全な解決策----------------------------

結局のところ、サーバーは認証を使用しています。そのため、ファイルをダウンロードするには認証に合格する必要があります。だから、完全な詳細を書いてください。コードは次のとおりです。

 private class CWebClient : WebClient
    {
        public CWebClient()
            : this(new CookieContainer())
        { }
        public CWebClient(CookieContainer c)
        {
            this.CookieContainer = c;
        }
        public CookieContainer CookieContainer { get; set; }

        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                (request as HttpWebRequest).CookieContainer = this.CookieContainer;
            }
            return request;
        }
    }
    static void Main(string[] args)
    {
        var client = new CWebClient();
        client.BaseAddress = @"http://forum.tractor-italia.net/";
        var loginData = new NameValueCollection();
        loginData.Add("username", "demodemo");
        loginData.Add("password", "demodemo");
        loginData.Add("login","Login");
        loginData.Add("redirect", "download/myfile.php?id=1622");
        client.UploadValues("ucp.php?mode=login", null, loginData);

        string remoteUri = "http://forum.tractor-italia.net/download/myfile.php?id=1622";
        client.OpenRead(remoteUri);
        string fileName = String.Empty;
        string contentDisposition = client.ResponseHeaders["content-disposition"];
        if (!string.IsNullOrEmpty(contentDisposition))
    {
        string lookFor = @"=";
        int index = contentDisposition.IndexOf(lookFor, 0);
        if (index >= 0)
            fileName = contentDisposition.Substring(index + lookFor.Length+7);
    }//attachment; filename*=UTF-8''JohnDeere6800.zip

       client.DownloadFile(remoteUri, fileName);


    }

動作する私のPCで。

于 2012-07-21T18:27:22.720 に答える