Я должен создать новостные рассылки URL. Я, чтобы сделать затем:
Но я испытываю некоторые затруднения из-за путей. Источники всех элементов были относительны (/img/welcome.png), но мне нужно абсолютный (http://www.mysite.com/img/welcome.png).
Как я могу сделать это?
С наилучшими пожеланиями, Alex.
Одним из возможных способов решения этой задачи является использование библиотеки HtmlAgilityPack .
Пример ( исправление ссылок ):
WebClient client = new WebClient();
byte[] requestHTML = client.DownloadData(sourceUrl);
string sourceHTML = new UTF8Encoding().GetString(requestHTML);
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(sourceHTML);
foreach (HtmlNode link in htmlDoc.DocumentNode.SelectNodes("//a[@href]"))
{
if (!string.IsNullOrEmpty(link.Attributes["href"].Value))
{
HtmlAttribute att = link.Attributes["href"];
att.Value = this.AbsoluteUrlByRelative(att.Value);
}
}
Если запрос приходит с вашего сайта (ссылки на тот же домен), то вы можете использовать следующее:
new Uri(Request.Uri, "/img/welcome.png").ToString();
Если вы находитесь в не-веб-приложении, или хотите жестко закодировать доменное имя:
new Uri("http://www.mysite.com", "/img/welcome.png").ToString();
У вас есть несколько вариантов:
Console.Write(ControlChars.Cr + "Please enter a Url(for example, http://www.msn.com): ") Dim remoteUrl As String = Console.ReadLine() Dim myWebClient As New WebClient() Console.WriteLine(("Downloading " + remoteUrl)) Dim myDatabuffer As Byte() = myWebClient.DownloadData(remoteUrl) Dim download As String = Encoding.ASCII.GetString(myDataBuffer) download.Replace("src=""/", "src=""" & remoteUrl & "/") download.Replace("href=""/", "href=""" & remoteUrl & "/") Console.WriteLine(download) Console.WriteLine("Download successful.")
Это очень надуманно, и на самом деле основная часть этого взята непосредственно из : http://msdn.microsoft.com/en-us/library/xz398a3f.aspx, но он иллюстрирует основной принцип метода 1.