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!

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top