Guest User

class

a guest
Apr 22nd, 2012
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.71 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Net;
  4. using System.Text;
  5. using System.Collections;
  6. using System.Windows.Forms;
  7. using System.Reflection;
  8.  
  9. namespace PostTest
  10. {
  11.     public class CookiePostClass
  12.     {
  13.         public System.Net.CookieContainer cContainer =
  14.         new System.Net.CookieContainer();
  15.  
  16.         public string PostData(string url, string data)
  17.         {
  18.             //文字コードを指定する
  19.             Encoding enc = Encoding.GetEncoding("euc-jp");
  20.  
  21.             byte[] postDataBytes = Encoding.ASCII.GetBytes(data);
  22.  
  23.             //WebRequestの作成
  24.             HttpWebRequest webreq =
  25.                 (HttpWebRequest)WebRequest.Create(url);
  26.             webreq.Method = "POST";
  27.            
  28.             webreq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0";
  29.             webreq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  30.             webreq.Headers.Add("Accept-Language", "ja");
  31.             webreq.Headers.Add("Accept-Encoding", "gzip, deflate");
  32.            
  33.             webreq.KeepAlive = true;
  34.             // Keep-Aliveをヘッダに付加するため
  35.             var sp = webreq.ServicePoint;
  36.             var prop = sp.GetType().GetProperty("HttpBehaviour", BindingFlags.Instance | BindingFlags.NonPublic);
  37.             prop.SetValue(sp, (byte)0, null);
  38.            
  39.             // ヘッダをブラウザのものと揃えるため
  40.             webreq.Referer = "http://kids.yahoo.co.jp/";
  41.            
  42.             webreq.ContentType = "application/x-www-form-urlencoded";
  43.  
  44.             webreq.ContentLength = postDataBytes.Length;
  45.  
  46.             webreq.ServicePoint.Expect100Continue = false;
  47.  
  48.             webreq.AllowAutoRedirect = false;
  49.            
  50.  
  51.  
  52.             //CookieContainerプロパティを設定する
  53.             webreq.CookieContainer = new CookieContainer();
  54.             //要求元のURIに関連したCookieを追加し、要求に使用する
  55.             webreq.CookieContainer.Add(cContainer.GetCookies(webreq.RequestUri));
  56.            
  57.             foreach (Cookie c in cContainer.GetCookies(webreq.RequestUri))
  58.             {
  59.                 // 別にforeachしなくても良かった.結果は変わらずなので無視
  60.                 webreq.Headers.Add("Cookie", c.ToString());
  61.             }
  62.  
  63.             // 書き込み
  64.             Stream reqStream = webreq.GetRequestStream();
  65.             reqStream.Write(postDataBytes, 0, postDataBytes.Length);
  66.             reqStream.Close();
  67.            
  68.             //サーバーからの応答を受信するためのWebResponseを取得
  69.             HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse();
  70.             //受信したCookieのコレクションを取得する
  71.             CookieCollection cookies = webreq.CookieContainer.GetCookies(webreq.RequestUri);
  72.             //Cookie名と値を列挙する
  73.             foreach (Cookie cook in cookies)
  74.                 Console.WriteLine("{0}={1}", cook.Name, cook.Value);
  75.             //取得したCookieを保存しておく
  76.             cContainer.Add(cookies);
  77.  
  78.             if (Array.IndexOf(webres.Headers.AllKeys, "Location") > -1)
  79.             {
  80.                 // リダイレクト無効にしてあるので手動でリダイレクト
  81.                 Console.WriteLine("Locate: " + webres.Headers["Location"]);
  82.                 return GetHtml(webres.Headers["Location"]);
  83.             }
  84.  
  85.            
  86.             webres.Cookies = cContainer.GetCookies(new Uri(url));
  87.             //応答データを受信するためのStreamを取得
  88.             Stream st = webres.GetResponseStream();
  89.             StreamReader sr = new StreamReader(st, enc);
  90.             //受信して表示
  91.             string html = sr.ReadToEnd();
  92.             //閉じる
  93.             sr.Close();
  94.  
  95.             return html;
  96.         }
  97.  
  98.         public string GetHtml(string url)
  99.         {
  100.             //文字コードを指定する
  101.             System.Text.Encoding enc =
  102.                 System.Text.Encoding.GetEncoding("euc-jp");
  103.  
  104.             //WebRequestの作成
  105.             System.Net.HttpWebRequest webreq =
  106.                 (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
  107.     restart:
  108.             webreq.CookieContainer = cContainer;
  109.  
  110.             webreq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0";
  111.             webreq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  112.             webreq.AllowAutoRedirect = false;
  113.  
  114.             //サーバーからの応答を受信するためのWebResponseを取得
  115.             System.Net.HttpWebResponse webres =
  116.                 (HttpWebResponse)webreq.GetResponse();
  117.            
  118.             //受信したCookieのコレクションを取得する
  119.             System.Net.CookieCollection cookies =
  120.                 webreq.CookieContainer.GetCookies(webreq.RequestUri);
  121.  
  122.             //取得したCookieを保存しておく
  123.             cContainer.Add(cookies);
  124.  
  125.             //Console.WriteLine("ResponseUri:: " + webres.ResponseUri.ToString());
  126.  
  127.  
  128.             if (Array.IndexOf(webres.Headers.AllKeys, "Location") > -1)
  129.             {
  130.                 // 手動リダイレクト
  131.                 webreq = (HttpWebRequest)WebRequest.Create(webres.Headers["Location"]);
  132.                 goto restart;
  133.             }
  134.  
  135.             //応答データを受信するためのStreamを取得
  136.             System.IO.Stream st = webres.GetResponseStream();
  137.             System.IO.StreamReader sr = new System.IO.StreamReader(st, enc);
  138.             //受信して表示
  139.             string html = sr.ReadToEnd();
  140.             //閉じる
  141.             sr.Close();
  142.  
  143.             return html;
  144.         }
  145.     }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment