Как получить все куки в C #? - PullRequest
2 голосов
/ 29 февраля 2012

Согласно Fiddler, я ожидаю, что эти куки после регистрации

Set-Cookie: JSESSIONID=value; Version=1; Domain=.domain.com.mx; Path=/
Set-Cookie: saplb_*=value; Version=1; Path=/
Set-Cookie: PortalAlias=portal; Path=/
Set-Cookie: MYSAPSSO2=value;path=/;domain=.domain.com.mx;HttpOnly

Поэтому я просто получаю этот куки:

Set-Cookie: PortalAlias=portal; Path=/

У меня есть этот код для входа в систему:

string url = "site.com";

string postdata = "user=username&pass=userpass";
byte[] buffer = Encoding.ASCII.GetBytes(postdata);


**// GET cookies from url
getCookies(url)**

// request
HttpWebRequest request = (HttpWebRequest)System.Net.WebRequest.Create(Url);
request.CookieContainer = this.cookies;

// post
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = buffer.Length;
using (Stream postdata_stream = request.GetRequestStream())
  postdata_stream.Write(buffer, 0, buffer.Length);


// response
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
  // here, I expect to receive 4 cookies, but I only get 1
  foreach (Cookie c in response.Cookies) 
  {
    log("Name:" + c.Name);
    log("Value:" + c.Value);
    log("");
    this.cookies.Add(new Cookie(c.Name, c.Value, c.Path, c.Domain));
  }
}

Проблема в том, что когда я проверяю свой ответ на программу в fiddler, появляются 4 файла cookie, но не почему я могу прочитать только один.

ОБНОВЛЕНИЕ

Код, добавленный для файлов cookie GET:

private void getCookies(string url)
{

  // request
  HttpWebRequest request = CreateWebRequestObject(url);
  request.CookieContainer = this.cookies; // protected member

  request.Method = "GET";
  request.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 irefox/10.0.2";

  // response
  using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
  {
    foreach (Cookie c in response.Cookies)
    {

        // add cookies to my CookieContainer
        this.cookies.Add(new Cookie(c.Name, c.Value, c.Path, c.Domain));
    }
  }
}

С помощью getCookies () у меня есть 3/4 файла cookie:

Set-Cookie: JSESSIONID=value; Version=1; Domain=.domain.com.mx; Path=/
Set-Cookie: saplb_*=value; Version=1; Path=/
Set-Cookie: PortalAlias=portal; Path=/

Но все еще нужен файл cookie:

Set-Cookie: MYSAPSSO2=value;path=/;domain=.domain.com.mx;HttpOnly

Кроме того, я сравниваю запрос с Fiddler / WinMerge:

// program request
$Version=1; saplb_*=value; $Path=/; $Version=1; JSESSIONID=value; $Path=/; Domain=.domain.com.mx
Expect: 100-continue

// firefox request
saplb_*=value; JSESSIONID=value
Connection: keep-alive

Почему в моем запросе есть символ "$"?

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Используйте Fiddler для сравнения HTTP-запроса, который вы делаете из кода, с запросом из браузера.

Для этого выберите два запроса и нажмите CTRL + W (вам может потребоваться настроить инструмент сравнения, следуя этим инструкциям )

Также попробуйте просмотреть все запросы, инициированные браузером. Возможно, что некоторые файлы cookie были получены в предыдущем запросе (обычно это запрос GET, который вы делаете, когда запрашиваете страницу входа в систему). При необходимости сначала выполните GET, соберите куки, а затем выполните POST.

0 голосов
/ 05 июня 2018
<%@ Page Language="C#"%>
<%
for (int i = 0; i < Request.Cookies.Count; i++)
  {
    Response.Write(Request.Cookies[i].Name + " : ");
    Response.Write(Request.Cookies[i].Value);
    Response.Write("<br />");
  }
%>
...