62,051
社区成员
发帖
与我相关
我的任务
分享
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);
/// <summary>
/// 获取CookieCollection
/// </summary>
/// <param name="loginUrl"></param>
/// <param name="postdata"></param>
/// <param name="header"></param>
/// <returns></returns>
public static CookieCollection GetCookieCollection(string loginUrl, string postdata)
{
HttpWebRequest request = null;
HttpWebResponse response = null;
try
{
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
CookieContainer cc = new CookieContainer();
request = (HttpWebRequest)WebRequest.Create(loginUrl);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
byte[] postdatabyte = Encoding.UTF8.GetBytes(postdata);
request.ContentLength = postdatabyte.Length;
request.AllowAutoRedirect = false;
request.CookieContainer = cc;
request.KeepAlive = true;
// TODO:跳过代理身份验证
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback
(
delegate { return true; }
);
//提交请求
Stream stream;
stream = request.GetRequestStream();
stream.Write(postdatabyte, 0, postdatabyte.Length);
stream.Close();
//接收响应
response = (HttpWebResponse)request.GetResponse();
response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);
CookieCollection cook = response.Cookies;
//Cookie字符串格式
//string strcrook = request.CookieContainer.GetCookieHeader(request.RequestUri);
return cook;
}
catch (Exception ex)
{
throw ex;
}
}
protected void button_Click(object sender, EventArgs e)
{
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
Dictionary<string, string> postParams = new Dictionary<string, string>();
postParams.Add("userName", "admin");
postParams.Add("userPwd", "XXXXX");
// 要提交的字符串数据。格式形如:user=uesr1&password=123
string postString = "";
int cnt = 0;
foreach (KeyValuePair<string, string> de in postParams)
{
string str = "";
if (cnt < postParams.Count - 1)
{
str = "&";
}
//把提交按钮中的中文字符转换成url格式,以防中文或空格等信息
postString += System.Web.HttpUtility.UrlEncode(de.Key.ToString()) + "=" + System.Web.HttpUtility.UrlEncode(de.Value.ToString()) + str;
cnt++;
}
CookieCollection mycookie = GetCookieCollection("http://X.X.X.X:8080/api/login", postString);
foreach (Cookie cookie in mycookie) //将cookie设置为浏览的cookie
{
HttpCookie cookies = new HttpCookie("CurrentUser");
cookie.Domain = cookie.Domain.ToString();
cookies[cookie.Name.ToString()] = cookie.Value.ToString();
cookies.Expires = DateTime.Now.AddMinutes(30);
Response.Cookies.Add(cookies);
cookie.HttpOnly = false;
//InternetSetCookie(
// "http://" + cookie.Domain.ToString(),
// cookie.Name.ToString(),
// cookie.Value.ToString()
// //);
// + ";expires=" + DateTime.Now.AddDays(1).ToString("r"));
}
//Response.Cookies
Response.Write(" <script language=javascript>window.location.href=\"http://X.X.X.X:8080/index.html;\"</script>");
}
/// <summary>
/// 通过POST方式发送数据
/// </summary>
/// <param name="Url">url</param>
/// <param name="postDataStr">Post数据</param>
/// <param name="cookie">Cookie容器</param>
/// <returns></returns>
public static string SendDataByPost(string Url, string postDataStr, ref CookieContainer cookie)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
if (cookie.Count == 0)
{
request.CookieContainer = new CookieContainer();
cookie = request.CookieContainer;
}
else
{
request.CookieContainer = cookie;
}
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postDataStr.Length;
Stream myRequestStream = request.GetRequestStream();
StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
myStreamWriter.Write(postDataStr);
myStreamWriter.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
SendDataByPost("http://X.X.X.X/index.html", postString, ref cc);