Windows Mobile CookieContainer
8259 ワード
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
namespace net.frejos.http
{
public class CookieManager
{
private Dictionary cookieValues;
public Dictionary CookieValues {
get {
if (this.cookieValues == null) {
this.cookieValues = new Dictionary();
}
return this.cookieValues;
}
}
public void PublishCookies(HttpWebRequest webRequest)
{
StringBuilder sb = new StringBuilder();
sb.Append("Cookie: ");
foreach (string key in this.CookieValues.Keys) {
sb.Append(key);
sb.Append("=");
sb.Append(this.CookieValues[key]);
sb.Append("; ");
sb.Append("$Path=\"/\"; ");
}
webRequest.Headers.Add(sb.ToString());
sb = null;
webRequest = null;
}
public void StoreCookies(HttpWebResponse webResponse)
{
for (int x=0; x < webResponse.Headers.Count; x++) {
if (webResponse.Headers.Keys[x].ToLower().Equals("set-cookie")) {
this.AddRawCookie( webResponse.Headers[x] );
}
}
webResponse = null;
}
private void AddRawCookie(string rawCookieData)
{
string key = null;
string value = null;
string[] entries = null;
if (rawCookieData.IndexOf(",") > 0)
{
entries = rawCookieData.Split(',');
}
else {
entries = new string[] { rawCookieData };
}
foreach (string entry in entries) {
string cookieData = entry.Trim();
if (cookieData.IndexOf(';') > 0)
{
string[] temp = cookieData.Split(';');
cookieData = temp[0];
}
int index = cookieData.IndexOf('=');
if (index > 0)
{
key = cookieData.Substring(0, index);
value = cookieData.Substring(index + 1);
}
if (key != null && value != null)
{
this.CookieValues[key] = value;
}
cookieData = null;
}
rawCookieData = null;
entries = null;
key = null;
value = null;
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("[");
foreach (string key in this.CookieValues.Keys) {
sb.Append("{");
sb.Append(key);
sb.Append(",");
sb.Append(this.CookieValues[key]);
sb.Append("}, ");
}
if (this.CookieValues.Keys.Count > 0)
{
sb.Remove(sb.Length - 2, 2);
}
sb.Append("]");
return sb.ToString();
}
}
}
Here is a usage example:
CookieManager cookieManager = new CookieManager();
// Set a cookie value
cookieManager.CookieValues["FavoriteCookie"] = "Chocolate Chip";
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
// Publish the cookies to the request before asking for the response
cookieManager.PublishCookies(webRequest);
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
// Store any cookies returned from the response
cookieManager.StoreCookies(webResponse);
// Get the value of a cookie
string session = cookieManager.CookieValues["SESSIONID"];
webRequest = (HttpWebRequest)WebRequest.Create(url2);
cookieManager.PublishCookies(webRequest);
webResponse = (HttpWebResponse)webRequest.GetResponse();