私は現在、DuckDuckGoアイコンユーティリティを使用して特定のWebページのファビコンを取得していますが、アイコンを取得するには、リクエストの最後に「.ico」を追加する必要がありますたとえば、https://icons.duckduckgo.com/ip2/www.google.com.icoDuckDuckGoから.icoファイルをダウンロード
したがって、私はWebClient
を使用してfaviconをダウンロードしていますが、ファイルを開くたびに、破損していると表示され、「ファイルのヘッダーを読み取ることができません」というエラーがスローされて以来、完全にダウンロードされていないようです。
私が試したこれまでのところ、以下の(私のWebClient
client
と呼ばれ、設定するためのアイコンがfavicon
と呼ばれ、アイコンファイルへのパスがfavicon_path
と呼ばれている):
Uri favicon_url = new Uri(
"https://icons.duckduckgo.com/ip2/" + gBrowser.Url.Host.ToString() + ".ico");
client.DownloadFile(@favicon_url, favicon_path);
favicon = new Icon(favicon_path);
と
Uri favicon_url = new Uri("https://icons.duckduckgo.com/ip2/"
+ gBrowser.Url.Host.ToString().Replace(".", "%2E") + ".ico");
client.DownloadFile(@favicon_url, favicon_path);
favicon = new Icon(favicon_path);
favicon_urlの複数のピリオド('.'
)が原因であると推測していますので、私の質問は次のとおりです。その名前にピリオドが複数ある場合は、WebClient
(または類似のもの)ですか?期間がない場合は、なぜDuckDuckGoからダウンロードしたファイルを読むことができないのですか?
_「私は複数の期間favicon_urlでは責任があると推測している(。)」:しかし、このアプローチは、中間ファイルを必要とせずに、データが
Icon
オブジェクトにリモートサーバから直接読み取ることができるようになります_それは私には非常に貧弱な推測のように聞こえる。 URLが有効であるかそうでないかのいずれかです。そうでない場合は、無効なデータではなくHTTPリクエストにエラーが発生します。私は、Webサイトが実際のWindowsアイコンファイルをアイコンとして使用していないことが大きな問題であると考えています。それらは実際にはビットマップであり、そのように読む必要があります。ダウンロードしたファイルを 'Icon'コンストラクタに渡そうとしているようですが、実際には有効な.icoファイルではありません(Webサイトの拡張機能にもかかわらず)。 –複数の期間は問題ではありません。ダウンロードしたファイルをメモ帳などのテキストエディタで開き、保存されているバイナリファイルであることを確認できますか?おそらく保存されているHTMLエラーページです。 – James
'favicon_url.ToString()'は何を返しますか? 'https:// icons.duckduckgo.com/ip2/www.google.com.ico'を使ってテストすれば、コードは動作しますか? – mjwills