Como analisar HttpWebResponse.Headers.Keys para um ID de sessão Set-cookie retornado
-
20-08-2019 - |
Pergunta
Eu estou tentando criar uma sessão de HttpWebRequest / HttpWebResponse com um site ASP.NET para analisar mais tarde um formulário HTML através de parâmetros de URL (essa parte eu sei como fazer), mas eu não entendo como analisar e definir um bolinho como o ID de sessão. Em Fiddler, isso mostra que o Session ID ASP.NET é retornado através de Set-Cookie na resposta ao pedido para o caminho / do url, mas como eu posso extrair este ID de sessão e defini-lo como um cookie para a próxima HttpWebRequest ? Eu entendo que este cabeçalho Set-Cookie poderia ser encontrado em HttpWebResponse.Headers.Keys, mas há um caminho direto para analisá-lo? Obrigado!
Solução
O framework .NET irá gerenciar cookies para você. Você não tem que preocupar-se com a análise as informações do cookie para fora dos cabeçalhos ou adicionar um cabeçalho cookie para seus pedidos.
Para armazenar e enviar o seu ID da sessão, use o Cookie
e CookieContainer
aulas para armazená-los e, em seguida, certifique-se de enviar os cookies a cada solicitação.
O exemplo a seguir mostra como fazer isso. O CookieContainer, 'cookieJar
' podem ser compartilhados entre vários domínios e pedidos. Uma vez que você adicioná-lo a um objeto de solicitação, também será adicionado a referência a ele no objeto de resposta quando a resposta é retornado.
CookieContainer cookieJar = new CookieContainer();
var request = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com");
request.CookieContainer = cookieJar;
var response = request.GetResponse();
foreach (Cookie c in cookieJar.GetCookies(request.RequestUri))
{
Console.WriteLine("Cookie['" + c.Name + "']: " + c.Value);
}
A saída desse código será:
Cookie['PREF']: ID=59e9a22a8cac2435:TM=1246226400:LM=1246226400:S=tvWTnbBhK4N7Tlpu
Outras dicas
A resposta de Dan Herbert me ajudou muito. Eu aprecio sua ajuda.
Apenas quero postar meu uso - espero que ajude alguém, em algum ponto do tempo. Minha exigência é que eu preciso para enviar de volta os cookies de primeira resposta http post no segundo pedido http post.
1º:
CookieContainer cookieJar = new CookieContainer();
request.CookieContainer = cookieJar;
....
CookieCollection setCookies = cookieJar.GetCookies(request.RequestUri);
2:
CookieContainer cc = new CookieContainer();
cc.Add(setCookies);
request.CookieContainer = cc;
Eu tenho o mesmo problema (com amazon) Eu uso o seguinte expressão regular:
string regexp = "(?<name>[^=]+)=(?<val>[^;]+)[^,]+,?";);
MatchCollection myMatchCollection = Regex.Matches(cookiesStr, regexp);
foreach (Match myMatch in myMatchCollection)
{
string cookieName = myMatch.Groups["name"].ToString();
string cookieVal = myMatch.Groups["val"].ToString();
Cookie cookie = new Cookie(cookieName, cookieVal);
cookies.Add(cookie);
}
Note que eu só se preocupam com o nome do cookie / valor ...
boa sorte Elia
hum Eu posso estar errado, mas pelo que eu estou observando ultimamente
Os cookies de uma primeira resposta, não incluem o 'cookie de conjunto', como biscoitos que vêm no cabeçalho (por exemplo, alguns id de sessão ...) no caso de um 302 (redirecionamento) o status
Se o autofollowredirect é definido como verdadeiro, então o cookie conjunto são processados, e o posterior pedido que é feito automaticamente, incluirá esses cookies definidos pelo bolinho set na primeira chamada
Se autofollowredirect é definida como false, em seguida, o primeiro pedido não obter os biscoitos positionned pelo cookie set, e eu acho que e este é também o meu queston se alguém sabe, que a única maneira de posteriormente ter esses cookies na próxima solicitação , é analisar os biscoitos set?