110,534
社区成员
发帖
与我相关
我的任务
分享
private static List<User> userList;
private void btnSign_Click(object sender, EventArgs e)
{
loadUserInfo(); //加载用户数据,会自动new 一个List<User>
if (userList != null && userList.Count > 0)
{
for (int i = 0; i < userList.Count; i++)
{
Thread.Sleep(1000);
User user = userList[i];
string userId = Des.DecryptDES(user.Id, "yakexiek");
string passWord = user.PassWord;
string userName = "";
string signString = ""; //获取签到后的信息
CookieCollection curCookie = new CookieCollection();
// HttpWebResponse response = null;
//获取登陆页面的cookie
response = HttpHelper.CreateGetHttpResponse(indexUrl, null, null, null);//这里第二次运行出现问题。
curCookie = HttpHelper.GetAllCookiesFromHeader(response.Headers["Set-Cookie"], host);
//POST 登陆页面,发送账号密码
IDictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("Username", userId);
parameters.Add("Password", passWord);
response = HttpHelper.CreatePostHttpResponse(loginUrl, parameters, null, null, curCookie);
curCookie = response.Cookies;
//模拟登陆showSystem.jsp,
response = HttpHelper.CreateGetHttpResponse(showSystemUrl, null, null, curCookie);
//模拟登陆openForm页面,进行用户别名解析
response = HttpHelper.CreateGetHttpResponse(openFormUrl, null, null, curCookie);
userName = getUserName(HttpHelper.GetResponseString(response, Encoding.UTF8));
//签到
response = HttpHelper.CreateGetHttpResponse(signUrl + userName, null, null, curCookie);
signString = HttpHelper.GetResponseString(response);
userList.RemoveAt(i);
}
}
}
///
HttpHelper.CreateGetHttpResponse
private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
/// <summary>
/// 创建GET方式的HTTP请求
/// </summary>
public static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent, CookieCollection cookies)
{
HttpWebRequest request = null;
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
//对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "GET";
request.UserAgent = DefaultUserAgent;
if (!string.IsNullOrEmpty(userAgent))
{
request.UserAgent = userAgent;
}
if (timeout.HasValue)
{
request.Timeout = timeout.Value;
}
//设置代理UserAgent和超时
//request.UserAgent = userAgent;
//request.Timeout = timeout;
if (cookies != null)
{
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
}
return request.GetResponse() as HttpWebResponse;
}
/// <summary>
/// Post请求
/// </summary>
/// <param name="url"></param>
/// <param name="parameters"></param>
/// <param name="timeout"></param>
/// <param name="userAgent"></param>
/// <param name="cookies"></param>
/// <param name="strRefer"></param>
/// <returns></returns>
public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int? timeout, string userAgent, CookieCollection cookies,string strRefer)
{
HttpWebRequest request = null;
//如果是发送HTTPS请求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
//设置代理UserAgent和超时
//request.UserAgent = userAgent;
//request.Timeout = timeout;
if (!string.IsNullOrEmpty(userAgent))
{
request.UserAgent = userAgent;
}
else
{
request.UserAgent = DefaultUserAgent;
}
if (timeout.HasValue)
{
request.Timeout = timeout.Value;
}
if (cookies != null)
{
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
}
if (!string.IsNullOrEmpty(strRefer))
{
request.Referer = strRefer;
}
//发送POST数据
if (!(parameters == null || parameters.Count == 0))
{
StringBuilder buffer = new StringBuilder();
int i = 0;
foreach (string key in parameters.Keys)
{
if (i > 0)
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
else
{
buffer.AppendFormat("{0}={1}", key, parameters[key]);
i++;
}
}
byte[] data = Encoding.ASCII.GetBytes(buffer.ToString());
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
// string[] values = request.Headers.GetValues("Content-Type");
HttpWebResponse resposne = (HttpWebResponse)request.GetResponse();
resposne.Cookies = request.CookieContainer.GetCookies(request.RequestUri);
return resposne;
}
/// <summary>
/// 创建POST方式的HTTP请求
/// </summary>
public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int? timeout, string userAgent, CookieCollection cookies)
{
return CreatePostHttpResponse(url,parameters,timeout,userAgent,cookies,null);
}