WebBrowserコントロールでアイコン取得

タグの編集
投稿者 友哉  (高校生) 投稿日時 2011/5/14 00:56:23
WebBrowserのコントロールでfavicoを取得するプログラムを試したのですがエラーが出ます(泣)
  Dim url As Uri = New Uri(Textaddress.Text)
        If url.HostNameType = UriHostNameType.Dns Then
            Dim iconURL = "http://" & url.Host & "/favico"
            Dim request As System.Net.WebRequest = System.Net.HttpWebRequest.Create(iconURL)
            Dim response As System.Net.HttpWebResponse = request.GetResponse()
            Dim stream As System.IO.Stream = response.GetResponseStream
            Dim favicon = Image.FromStream(stream)
            Me.ico.Image = favicon
        End If

エラー内容
Dim response As System.Net.HttpWebResponse = request.GetResponse()
リモート サーバーがエラーを返しました: (404) 見つかりません

とでます。
改善するようにはどうすればいいでしょうか??
投稿者 るきお  (社会人) 投稿日時 2011/5/14 01:21:22
>Dim iconURL = "http://" & url.Host & "/favico"
このURLにアイコンがないのではないでしょうか?
ないものはいくらプログラムを作っても取得できません。
404はファイルがないときにサーバーが送ってくるメッセージでVBとしては正常です。

アイコンの場所はサーバー側のルートディレクトリの直下ではなく、
html内で指定された別の場所の場合もあります。

http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9423
で、あにすさんがfaviconを取得するサンプルを書かれていますので参考になると思います。
投稿者 友哉  (高校生) 投稿日時 2011/5/14 14:26:04
 Dim iconURL = "http://" & url.Host & "/favicon.ico"
の用に直しましたら出来ました。
ですがYouTubeやGoogleのfaviconが取得できません(泣)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/5/14 15:05:51
URL 決め打ちで表示するだけならば、下記の一行で済みます。
PictureBox1.LoadAsync("http://www.google.co.jp/favicon.ico")



> ですがYouTubeやGoogleのfaviconが取得できません(泣)
質問の際には、状況をもう少し正確に伝えていただけると助かります。

『先のコードを…に直したところ、~のサイトでは取得できましたが、 ~という URLは依然 404 エラーです。』
『…というコードに直して取得させてみましたが、予想していた物とは違う画像が取得されます。』
『…という処理を行っている行で、〇〇〇というエラーが発生してしまいます。』


また、取得できたサイトと取得できないサイトの違いについては調査済みでしょうか?

favicon があるサイトに対して処理しているのに、取得できる場合と取得できない場合が
あるのなら、それぞれの URL および取得のためのコード全文を再掲してみてください。

> の用に直しましたら出来ました。
~の用に → ~のように/~の様に 、かな。
投稿者 友哉  (高校生) 投稿日時 2011/5/14 15:29:44
なんか取得できるようになりましたww
ありがとうございました。
投稿者 るきお  (社会人) 投稿日時 2011/5/14 16:13:04
こんにちは。

取得できたようでよかったですが、
今後この掲示板を見る人のためにどうやったら解決したかを具体的に書いてもらうことはできますか?

掲示板の情報はギブアンドテイクでお願いします。
投稿者 友哉  (高校生) 投稿日時 2011/5/14 19:52:02
解決方法は簡単でした。
Dim url As Uri = New Uri(Textaddress.Text)
        If url.HostNameType = UriHostNameType.Dns Then
            Dim iconURL = "http://" & url.Host & "/favico"
            Dim request As System.Net.WebRequest = System.Net.HttpWebRequest.Create(iconURL)
            Dim response As System.Net.HttpWebResponse = request.GetResponse()
            Dim stream As System.IO.Stream = response.GetResponseStream
            Dim favicon = Image.FromStream(stream)
            Me.ico.Image = favicon
        End If

このコードの
Dim iconURL = "http://" & url.Host & "/favico"
これを
Dim iconURL = "http://" & url.Host & "/favicon.ico"
に変えた所スムーズにアイコンを取得してくれます。
ぜひ参考にしてみてくださいww
投稿者 るきお  (社会人) 投稿日時 2011/5/14 20:21:09
それですと、
>Dim iconURL = "http://" & url.Host & "/favicon.ico"
>の用に直しましたら出来ました。
>ですがYouTubeやGoogleのfaviconが取得できません(泣)
これは解決していないということですか?



投稿者 友哉  (高校生) 投稿日時 2011/5/14 21:21:41
問題なくYouTubeやGoogleaのアイコンも取得できます。
投稿者 るきお  (社会人) 投稿日時 2011/5/14 21:38:09
となると、
>Dim iconURL = "http://" & url.Host & "/favicon.ico"
>の用に直しましたら出来ました。
>ですがYouTubeやGoogleのfaviconが取得できません(泣)
という書き込みは何かの間違いですか?
投稿者 友哉  (高校生) 投稿日時 2011/5/14 23:18:29
すいません。
間違えですorz