Reputation: 25
I tried:
foreach (OpenQA.Selenium.Cookie cook in driver.Manage().Cookies.AllCookies)
{
System.Net.Cookie cookie = new System.Net.Cookie();
cookie.Name = cook.Name;
cookie.Value = cook.Value;
cookie.Domain = cook.Domain;
header.Add(cookie);
}
But it gave me a NullReference
at header.Add(cookie);
I'm trying to get the cookies of my Selenium driver to a CookieContainer
to use in a WebRequest
.
Upvotes: 0
Views: 3704
Reputation: 1741
Loop through the selenium cookies in the web driver and convert them to System.Net cookies:
var cookieContainer = new CookieContainer();
foreach (var cookie in driver.Manage().Cookies.AllCookies)
{
System.Net.Cookie netcookie = new System.Net.Cookie()
{
Domain = cookie.Domain,
HttpOnly = cookie.IsHttpOnly,
Name = cookie.Name,
Path = cookie.Path,
Secure = cookie.Secure,
Value = cookie.Value,
};
if (cookie.Expiry.HasValue)
netcookie.Expires = cookie.Expiry.Value;
cookieContainer.Add(netcookie);
}
Upvotes: 2
Reputation: 1361
This is how you do it.
WebClientEx myWebClient = new WebClientEx(new CookieContainer());
CookieCollection cc = new CookieCollection();
foreach (OpenQA.Selenium.Cookie cook in driver.Manage().Cookies.AllCookies)
{
System.Net.Cookie cookie = new System.Net.Cookie();
cookie.Name = cook.Name;
cookie.Value = cook.Value;
cookie.Domain = cook.Domain;
cc.Add(cookie);
}
myWebClient.CookieContainer.Add(cc);
You need to use this extension to webclient:
public class WebClientEx : WebClient
{
public WebClientEx(CookieContainer container)
{
this.container = container;
}
public CookieContainer CookieContainer
{
get { return container; }
set { container = value; }
}
private CookieContainer container = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest r = base.GetWebRequest(address);
var request = r as HttpWebRequest;
if (request != null)
{
request.CookieContainer = container;
}
return r;
}
protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result)
{
WebResponse response = base.GetWebResponse(request, result);
ReadCookies(response);
return response;
}
protected override WebResponse GetWebResponse(WebRequest request)
{
WebResponse response = base.GetWebResponse(request);
ReadCookies(response);
return response;
}
private void ReadCookies(WebResponse r)
{
var response = r as HttpWebResponse;
if (response != null)
{
CookieCollection cookies = response.Cookies;
container.Add(cookies);
}
}
}
The extension I found here: Using CookieContainer with WebClient class
Upvotes: 1