2016-05-03 9 views
-1

私はWebサイトをクロールするためにC#アプリケーションで書いています。 問題が発生しました このURLがファイルまたはウェブページにつながっていることがわかりました。 リクエストされたURLを送信することなくこの問題を解決するにはどうすればよいですか?URLを確認する方法はC#のファイルタイプかウェブページタイプですか?

+3

のURLコンテンツを提供する。 「ファイル」と「ウェブページ」の違いは何ですか?あなたは実際に応答の 'Content-Type'ヘッダーを要求していますか? – SLaks

+1

あなたはどのクライアントを使用していますか? URLへのHEADリクエストを作成し、レスポンスヘッダーのcontent-typeを調べることができるはずです。 – Lee

+1

''要求されたURLを送信せずにこの問題を解決する方法はありますか? '' - できません。 URL自体は単なるアドレスです。そのアドレスに何があるかについての情報を提供するものではありません。何かを探す場所を教えてくれるだけです。そのアドレスにあるWebサーバーは* anything *を返すことができます。そのアドレスの内容に関する詳細情報を取得するには、いくつかの*リクエスト(最小限は 'HEAD'リクエスト)をしなければなりません。 – David

答えて

2

Uniform Resource Locatorはファイルシステムパスに匹敵しないため、要求を送信することはできません。以下のURLは.jpgで終わるながらたとえば、それは明らかに絵ではありません。ここで

google.com/search?q=asd.jpg

はあなたの心を変更することを決定した場合にどのように、次のとおりです。

public bool IsFileContent(string url) 
{ 
    var request = HttpWebRequest.Create(url); 
    request.Method = "HEAD"; 

    switch (request.GetResponse().ContentType) 
    { 
     case "image/jpeg": return true; 
     case "text/plain": return true; 
     case "text/html": return false; 

     default: // TODO: add more case as needed 
      throw new ArgumentOutOfRangeException(); 
    } 
} 
-1

私が考えることができる唯一のことは、URLの最後にファイルの拡張子を確認することです。拡張子で終わらないURLを使用してファイルを送信できるため、これで100%の成功率は得られません。それはファイル名に拡張子の付いたファイル名を終えるようにするのが普通の方法だと言われています。

+0

ファイル拡張子はURL上では意味がありません。 HTTPはファイルシステムではありません。 – David

+0

@Davidいいえ、ウェブサーバーにアップロードされたアップロードや、ダウンロード可能なウェブサーバー上にあるファイルのほとんどは、ファイル拡張子(.pdf、.jpgなど)で終わります。 –

+0

それでは、 '/DownloadFile.aspx?fileID = 123'か'/Files/123'か '/FindFiles.aspx?searchText = * .jpg' – David

1

あなたがしたいことは文字通り不可能です。 URLはファイルやウェブページにつながりません。それらはハンドラを要求するようにルーティングされます。リクエストハンドラは、HTMLレスポンス、ファイルダウンロード、または他のタイプのレスポンスを返すことができます。 「.html」や「.pdf」などの拡張機能は、応答の種類を示すものです。しかし、URLには、応答の種類を示さない拡張子、または(まさにこのページのように)拡張子がないことがあります。

HTTPリクエストの応答タイプは、URLだけでは判別できません。

関連する問題