ASP.NET Tutorial/Development/WebClient

Материал из .Net Framework эксперт
Версия от 14:56, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

asynchronous page downloading

   <source lang="csharp">

<%@ Page Async="true" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"

   Inherits="Default" Trace="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

   <title>Async pages</title>

</head> <body>

   <form id="form1" runat="server">
           <% = rssData %>
       
   </form>

</body> </html> File: Default.aspx.cs using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Threading; using System.Xml; using System.Net; using System.IO; using System.Text; using System.Xml.XPath;

public partial class Default : System.Web.UI.Page {

   const string RSSFEED = "http://weblogs.asp.net/despos/rss.aspx";
   private WebRequest req;
   public string rssData;
   protected void Page_Load(object sender, EventArgs e)
   {
       AddOnPreRenderCompleteAsync(
           new BeginEventHandler(BeginTask),
           new EndEventHandler(EndTask));
   }
   IAsyncResult BeginTask(object sender, EventArgs e, AsyncCallback cb, object state)
   {
       Trace.Warn("Begin async: Thread=" + 
                   Thread.CurrentThread.ManagedThreadId.ToString());
       req = WebRequest.Create(RSSFEED);
       return req.BeginGetResponse(cb, state);
   }
   void EndTask(IAsyncResult ar)
   {
       string text;
       using (WebResponse response = req.EndGetResponse(ar))
       {
           StreamReader reader;
           using (reader = new StreamReader(response.GetResponseStream()))
           {
               text = reader.ReadToEnd();
           }
           rssData = ProcessFeed(text);
       }
       Trace.Warn("End async: Thread=" + 
                   Thread.CurrentThread.ManagedThreadId.ToString());
       
   }
   string ProcessFeed(string feed)
   {
       StringBuilder sb = new StringBuilder();
       XmlDocument doc = new XmlDocument();
       doc.LoadXml(feed);
       XPathNavigator nav = doc.CreateNavigator();
       XPathNodeIterator iterator;
       iterator = nav.Select("/rss/channel/title");
       iterator.MoveNext();
sb.AppendFormat("

{0}

", iterator.Current.Value);
       iterator = nav.Select("/rss/channel/description");
       iterator.MoveNext();
       sb.AppendFormat("{0}", iterator.Current.Value);
       XmlNodeList items = doc.SelectNodes("/rss/channel/item");
sb.Append("
    "); foreach (XmlNode n in items) { XmlNode title = n.SelectSingleNode("title"); XmlNode link = n.SelectSingleNode("link"); XmlNode date = n.SelectSingleNode("pubDate"); sb.AppendFormat("
  • <a href=\"{0}\">{1}</a> on {2}
  • ", link.InnerText, title.InnerText, date.InnerText);
           }
    
    sb.Append("
");
       return sb.ToString();
   }

}</source>


Read page header

   <source lang="csharp">

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ScrapeHeadings" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

 <title>Scraping Headings</title>

</head> <body>

   <form id="form1" runat="server">
     <asp:Panel ID="panUrl" runat="server" GroupingText="Search" CssClass="myPanel">
        Enter Url:
        <asp:TextBox ID="txtUrl" runat="server" Columns="50"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" OnClick="btnSearch_Click" Text="Search" /> </asp:Panel> <asp:Panel ID="panHeadings" runat="server" GroupingText="Headings in this Url" CssClass="myPanel" > <asp:Literal ID="litContent" runat="server" /> </asp:Panel> </form>

</body> </html>

File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Net; using System.IO; using System.Text; using System.Text.RegularExpressions; public partial class ScrapeHeadings : System.Web.UI.Page {

  protected void Page_Load(object sender, EventArgs e)
  {
    litContent.Text = "";
  }
  protected void btnSearch_Click(object sender, EventArgs e)
  {
     try
     {
        WebClient client = new WebClient();
        string content = client.DownloadString(txtUrl.Text);
        Regex reg = new Regex(@"<h\d>.+</h\d>", RegexOptions.IgnoreCase);
        MatchCollection mc = reg.Matches(content);
        foreach (Match m in mc)
        {
           litContent.Text += HttpUtility.HtmlEncode(m.Value) + "
"; } } catch { litContent.Text = "Could not connect to " + txtUrl.Text; } }

}</source>


Retrieve web page

   <source lang="csharp">

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="GetBookImage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

   <title>Untitled Page</title>

</head> <body>

   <form id="form1" runat="server">
   </form>

</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text.RegularExpressions; using System.Net; using System.IO; public partial class GetBookImage : System.Web.UI.Page {

   protected void Page_Load(object sender, EventArgs e)
   {
   FindBook findBook = new FindBook();
   Response.Redirect(findBook.GetImageUrl(Request.QueryString["isbn"]));
   }

} public class FindBook {

 public string GetImageUrl(string isbn)
 {
   try
   {
     isbn = isbn.Replace("-", "");
     string bookUrl = "http://www.amazon.ru/exec/obidos/ASIN/" + isbn;
     string bookHtml = GetWebPageAsString(bookUrl);
     string imgTagPattern = "<img src=\"(http://images.amazon.ru/images/P/" + isbn + "[^\"]+)\"";
     Match imgTagMatch = Regex.Match(bookHtml, imgTagPattern);
     return imgTagMatch.Groups[1].Value;
   }
   catch
   {
     return "";
   }
 }
 public string GetWebPageAsString(string url)
 {
   WebRequest requestHtml = WebRequest.Create(url);
   WebResponse responseHtml = requestHtml.GetResponse();
   StreamReader r = new StreamReader(responseHtml.GetResponseStream());
   string htmlContent = r.ReadToEnd();
   r.Close();
   return htmlContent;
 }

}</source>


Trigger Batch Compile

   <source lang="csharp">

using System; using System.Net; using System.IO; using System.Text; class TriggerBatchCompile { private static string[] urls = { "http://localhost/page.aspx", "http://localhost/anotherApplication/page.aspx", "http://localhost/yetAnotherApplication/page.aspx" };

   public static void Main(string[] args) {
       WebResponse result = null;
       for(int i = 0; i < urls.Length; i++) {
           try {
               Console.WriteLine(urls[i]);
               WebRequest request = WebRequest.Create(urls[i]);
               result = request.GetResponse();
               Stream receiveStream = result.GetResponseStream();
               StreamReader streamReader = new StreamReader(receiveStream);
               char[] read = new Char[256];
               int count = streamReader.Read( read, 0, 256 );
               while (count > 0) {
                   count = streamReader.Read(read, 0, 256);
               }
           }
           catch(Exception e) {
               Console.WriteLine(e);
           } 
           finally {
               if ( result != null ) {
                   result.Close();
               }
           }
       }
   }

}</source>