これは機能です:
private static HtmlAgilityPack.HtmlDocument getHtmlDocumentWebClient(string url, bool useProxy, string proxyIp, int proxyPort, string usename, string password)
{
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
WebClient client = new WebClient();
//client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
client.Credentials = CredentialCache.DefaultCredentials;
client.Proxy = WebRequest.DefaultWebProxy;
if (useProxy)
{
//Proxy
if (!string.IsNullOrEmpty(proxyIp))
{
WebProxy p = new WebProxy(proxyIp, proxyPort);
if (!string.IsNullOrEmpty(usename))
{
if (password == null)
password = string.Empty;
NetworkCredential nc = new NetworkCredential(usename, password);
p.Credentials = nc;
}
}
}
Stream data = client.OpenRead(url);
doc.Load(data);
data.Close();
return doc;
}
私はプログラムの各反復でリンクを取得し、数回後に変数 url は次のようになります。
http://appldnld.apple.com/iTunes10/041-7196.20120912.Ber43/iTunesSetup.exe
InternetExplorer でこのリンクを試すと、ファイルのダウンロードが試行されます。しかし、私のプログラムでは、次の行でロードしようとしています:
doc.Load(データ);
しばらくするとプログラムがフリーズしてスタックし、最後にタスクマネージャーでアプリケーションを強制終了すると、プログラムは例外をスローします:
StackOverFlowException was unhandled
An unhandled exception of type 'System.StackOverflowException' occurred in HtmlAgilityPack.dll
System.StackOverflowException was unhandled
Message: An unhandled exception of type 'System.StackOverflowException' occurred in HtmlAgilityPack.dll
今、私はブレークポイントを使用しましたが、問題は次の行で発生します:
doc.Load(data);
問題は、このリンクの場合、どのように処理すればよいですか? 試してキャッチして無視する必要がありますか、それともこれをリンクと見なす必要がありますか? 将来、このリンクを使用して exe ファイルをダウンロードしたいので、ctach を試してみるのはお勧めできません。
編集:
getHtmlDocumentWebClient は次のようになります。
private static HtmlAgilityPack.HtmlDocument getHtmlDocumentWebClient(string url, bool useProxy, string proxyIp, int proxyPort, string usename, string password)
{
HttpWebRequest myHttpWebRequest = null; //Declare an HTTP-specific implementation of the WebRequest class.
HttpWebResponse myHttpWebResponse = null; //Declare an HTTP-specific implementation of the WebResponse class
//Create Request
myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
myHttpWebRequest.Method = "GET";
myHttpWebRequest.ContentType = "text/html; encoding='utf-8'";
//Get Response
myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
Stream data = myHttpWebResponse.GetResponseStream();//client.OpenRead(url);
doc.Load(data);
data.Close();
return doc;
}
まだ同じ問題。関数の何が問題になっていますか? text/html コンテンツの実際のチェックを行うにはどうすればよいですか?