2017-01-19 8 views
0

要するに、WebページのGET要求をプログラムで検出する必要があります。ウェブページのGETリクエストの原点をプログラムで検出するにはどうすればよいですか? (C#)

私の会社は現在、別のソフトウェアをインストールする独自のソフトウェア用の小さなインストーラを作成しようとしています。

ソフトウェアのこの他の部分を取得するには、私はそれが(DirローカルのAppData /中だけTempディレクトリである)C#の美しいWebClientクラスを介してダウンロードリンクを呼び出すのと同じくらい簡単です実現:

using (WebClient client = new WebClient()) 
{ 
    client.DownloadFile("[download link]", Dir.FullName + "\\setup.exe"); 
} 

しかし、インストーラが出すページは直接ダウンロードページではありません。実際のダウンロードリンクは変更される可能性があります(当社の特定のインストーラは別のダウンロードサーバーで別の場所にホストされている可能性があります)。

これを回避するには、ページが作成したGETリクエストを監視し、そこからURLを動的に取得できることに気付きました。

だから、私はやるつもりだと思っていますが、ページに何が要求されているかを見ることができる言語が組み込まれていますか?あるいは、自分自身でこの機能を書かなければならないのですが、何が良い出発点でしょうか?

答えて

-1

私はあなた自身の "mediahandler"を書く必要があると思います。これはHttpResponseMessageを返します。

with webapi2

[HttpGet] 
[AllowAnonymous] 
[Route("route")] 
public HttpResponseMessage GetFile([FromUri] string path) 
{ 
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); 
    result.Content = new StreamContent(new FileStream(path, FileMode.Open, FileAccess.Read)); 
    string fileName = Path.GetFileNameWithoutExtension(path); 
    string disposition = "attachment"; 
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(disposition) { FileName = fileName + Path.GetExtension(absolutePath) }; 
    result.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(Path.GetExtension(path))); 
    return result; 
} 
+0

私はあなたが誤解していると思いますが、私はクライアントを書いています。私はサーバー側ではない。ページがロードされた後にサーバーが行ったGETリクエストが必要です。この回答は役に立ちません。 – Ellis

+0

yepp私は完全に誤解しました – DotNetDev

1

私はこのようにしたいと思います。ダウンロードページのHTMLコンテンツをダウンロードします(ファイルをダウンロードするリンクが含まれているページ)。次に、HTMLをスクラップして、ダウンロードリンクのURLを見つけます。最後に、スクラップしたアドレスからファイルをダウンロードします。

ウェブサイトからダウンロードURLを掻き集める場合は、HTMLアジリティパックを使用することをおすすめします。開始するにはhereを参照してください。

+0

私はこのようにすることを考えましたが、パフォーマンスは私の最優先事項の1つですから、回答全体を削ってはいけません。あなたのご意見ありがとうございます。 – Ellis

関連する問題