Reputation: 115
I have an issue with one of my requests to localhost server.
To authenticate, I need two cookies, one from sendReqForToken() method and one from sendLoginReq(string login, string pass).
In response I get cookie from sendLoginReq, but not from sendReqForToken().
I don't have idea why one request has a cookie second doesn't.
It is interesting that I get correct token(response content is correct) from sendReqForToken() method, but without any cookie in response header.
This is sendReqForToken() method body:
public void sendReqForToken()
{
string adres = Globals.TOKEN_URL;
RestRequest request = new RestRequest(adres, Method.GET);
var client = new RestClient();
client.CookieContainer = new CookieContainer();
client.ExecuteAsync(request, (response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
var tokenValue = JsonConvert.DeserializeObject<Token.RootObject>(response.Content);
DataManager.Instance.authToken = tokenValue.authenticity_token;
if (response.Cookies.Count > 0)
{
var cookie = response.Cookies.FirstOrDefault();
DataManager.Instance.cookieJar.Add(new Uri(Globals.TOKEN_URL), new Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain));
}
}
else
{
}
});
}
response.Cookies.Count always is equal to 0. response.cookies property always is equal to null.
This is sendLoginReq method body:
public void sendLoginReq(string login, string pass)
{
login = "admin";
pass = "admin";
string adres = Globals.LOGIN_URL;
RestRequest request = new RestRequest(adres, Method.POST);
var client = new RestClient();
request.RequestFormat = DataFormat.Json;
try
{
request.AddBody(new
{
authenticity_token = DataManager.Instance.authToken,
commit = "Login",
utf8 = true,
user_session = new
{
email = login,
password = pass
}
});
}
catch
{
}
client.ExecuteAsync(request, (response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
if (response.StatusCode == HttpStatusCode.OK)
{
var cookie = response.Cookies.FirstOrDefault();
DataManager.Instance.cookieJar.Add(new Uri(Globals.LOGIN_URL), new Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain));
}
}
else
{
}
});
}
In second method I get correct cookie.
Thanks a lot for any ideas.
Upvotes: 7
Views: 9171
Reputation: 760
Thanks @KarthikNishanth. To make it clear:
client.CookieContainer = new CookieContainer ();
var cookie = client.CookieContainer.GetCookieHeader(new Uri("http://domain_or_subdomain.ext"));
var client
is a RestClient
After the client.Execute(request);
the GetCookieHeader()
will return the desired cookie
Upvotes: 10
Reputation: 3880
I had the same problem, your server sends you a cookie with HTTPonly=true parameter, you should change HTTOnly parameter to false and then you can grab the cookie from token response.
see this link answer to your question
Upvotes: 3