之前,我一直想login 后取到response cookie,然后add cooke to another request ,但是一直比较难取到response cookie.
之后,我add cookieContainer in webclient keep session
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace GrabTask
{
public class CookieAwareWebClient : WebClient
{
public CookieAwareWebClient()
: base()
{
CookieContainer = new CookieContainer();
this.ResponseCookies = new CookieCollection();
}
public CookieContainer CookieContainer { get; private set; }
public CookieCollection ResponseCookies { get; set; }
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
HttpWebRequest webRequest = request as HttpWebRequest;
if (webRequest != null)
{
webRequest.AllowAutoRedirect = true;
webRequest.CookieContainer = CookieContainer;
}
return request;
}
protected override WebResponse GetWebResponse(WebRequest request)
{
var response = (HttpWebResponse)base.GetWebResponse(request);
this.ResponseCookies = response.Cookies;
return response;
}
}
}
call in program
private static void login(CookieAwareWebClient wc)
{
wc.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36";
//wc.Headers.Add(HttpRequestHeader.Cookie, "JSESSIONID=88E39FF3D8A2749C1FCB902C22A00306");
var reqparm = new System.Collections.Specialized.NameValueCollection();
reqparm.Add("j_password", "******");
reqparm.Add("j_username", "******");
byte[] responsebytes1 = wc.UploadValues("https//ulr", "POST", reqparm);
}
using (CookieAwareWebClient wc = new CookieAwareWebClient())
{
login(wc);
var reqparm1 = new System.Collections.Specialized.NameValueCollection();
byte[] responsebytes = wc.UploadValues("other url", "POST", reqparm1);
string responsebody = Encoding.Default.GetString(responsebytes);
list_doc.LoadHtml(responsebody);
}
other site site sample:
private CookieContainer cookieContainer = new CookieContainer();
public bool isServerOnline()
{
Boolean ret = false;
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(VPMacro.MacroUploader.SERVER_URL);
req.CookieContainer = cookieContainer; // <= HERE
req.Method = "HEAD";
req.KeepAlive = false;
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
if (resp.StatusCode == HttpStatusCode.OK)
{
// HTTP = 200 - Internet connection available, server online
ret = true;
}
resp.Close();
return ret;
}
catch (WebException we)
{
// Exception - connection not available
Log.e("InternetUtils - isServerOnline - " + we.Status);
return false;
}
}