c# - Cómo analizar HttpWebResponse.Headers.Keys para una identificación de sesión Set-Cookie devuelta
cookies httpwebrequest (4)
.NET Framework administrará las cookies por usted. No tiene que preocuparse por analizar la información de la cookie fuera de los encabezados o agregar un encabezado de cookie a sus solicitudes.
Para almacenar y enviar su ID de sesión, use las clases Cookie
y CookieContainer
para almacenarlas y luego asegúrese de enviar sus cookies con cada solicitud.
El siguiente ejemplo muestra cómo hacer esto. El CookieContainer, '' cookieJar
'' se puede compartir en múltiples dominios y solicitudes. Una vez que lo agregue a un objeto de solicitud, la referencia al mismo también se agregará al objeto de respuesta cuando se devuelva la respuesta.
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);
}
La salida de este código será:
Cookie[''PREF'']: ID=59e9a22a8cac2435:TM=1246226400:LM=1246226400:S=tvWTnbBhK4N7Tlpu
Intento crear una sesión HttpWebRequest / HttpWebResponse con un sitio web ASP.NET para analizar posteriormente un formulario HTML a través de parámetros de URL (esta parte sé cómo hacerlo), pero no entiendo cómo analizar y establecer una cookie como la identificación de la sesión. En Fiddler, muestra que la Id. De sesión de ASP.NET se devuelve a través de Set-Cookie en la respuesta a la solicitud a la / ruta de la url, pero ¿cómo puedo extraer esta id de sesión y configurarla como una cookie para la próxima HttpWebRequest? ? Entiendo que este encabezado Set-Cookie se encontraría en HttpWebResponse.Headers.Keys, pero ¿hay una ruta directa para analizarlo? ¡Gracias!
La respuesta de Dan Herbert realmente me ayudó. Aprecio tu ayuda.
Solo quiero publicar mi uso, espero que ayude a alguien en algún momento. Mi requisito es que tengo que devolver las cookies de la primera respuesta http post a la segunda solicitud posterior a http.
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;
Tengo el mismo problema (con Amazon) Uso la siguiente expresión 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);
}
Tenga en cuenta que solo me importa el nombre / valor de la cookie ...
buena suerte Elia
zumbido, puedo estar equivocado, pero por lo que estoy observando últimamente
Las cookies de una primera respuesta no incluyen la "cookie establecida" como cookies que vienen en el encabezado (por ejemplo, una identificación de sesión ...) en el caso de un estado 302 (redirigir)
Si el autofollowredirect se establece en true, se procesa la cookie establecida y la solicitud subsiguiente, que se realiza automáticamente, incluirá aquellas cookies definidas por la cookie establecida en la primera llamada
Si autofollowredirect se configura como falso, la primera solicitud no obtiene las cookies ubicadas por la cookie establecida, y supongo que esta es también mi pregunta si alguien sabe que la única forma de tener esas cookies en la siguiente solicitud es analizar las cookies establecidas?