Cookie

Тема в разделе ".NET", создана пользователем DZX, 5 янв 2007.

Статус темы:
Закрыта.
  1. DZX

    DZX Гость

    Возможно ли включить поддержку cookie в WebClient, по умолчанию они выключены?
     
  2. Pasha

    Pasha Гость

    Можно, примерно так:
    Код (Text):
    HttpWebRequest request = (HttpWebRequest) WebRequest.Create(myURI);
    request.CookieContainer = new CookieContainer();
    и использовать тот же CookieContainer для всех запросов.
     
  3. DZX

    DZX Гость

    А, что вы можете сказать конкретно про WebClient, он помойму сбоку от HttpWebRequest и возможно ли распространить это на него?
     
  4. Pasha

    Pasha Гость

    Если очень надо именно WebClient, то:
    Код (Text):
    public class WebClientExtended : WebClient
    {
    private CookieContainer myContainer;
    private HttpWebRequest myRequest;
    private string myMethod;


    public string Method
    {
    get { return myMethod; }
    set { myMethod = value; }
    }


    public CookieContainer Cookies
    {
    get
    {
    if (myContainer == null)
    {
    myContainer = new CookieContainer();
    }
    return myContainer;
    }
    set
    {
    myContainer = value;
    }
    }


    protected override WebRequest GetWebRequest(Uri address)
    {
    myRequest = (HttpWebRequest)base.GetWebRequest(address);
    myRequest.Method = this.Method;
    myRequest.CookieContainer = Cookies;
    return myRequest;
    }


    protected override WebResponse GetWebResponse(WebRequest request)
    {
    return myRequest.GetResponse();
    }


    protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result)
    {
    return myRequest.EndGetResponse(result);
    }
    взято с http://channel9.msdn.com/rss.aspx?threadID=166252
     
  5. DZX

    DZX Гость

    Спасибо, покручу ...
     
  6. DZX

    DZX Гость

    Понаглею и воспользуюсь еще советами
    1. При попытке передать post-ом через HttpWebRequest на сервер
    параметры выкидывает с ошибкой
    The server committed a protocol violation. Section=ResponseStatusLine
    Встречал совет KeepAlive в false установить - не помогает.
    2. Можно ли передавать в параметрах так же файлы, ну типа
    отправлять на сервер в составе post запроса?
     
  7. Pasha

    Pasha Гость

    Да на здоровье:
    1. Попробуй впиши в конфиг приложения:
    Код (Text):
    <?xml version ="1.0"?>
    <configuration>
    <system.net>
    <settings>
    <httpWebRequest useUnsafeHeaderParsing="true" />
    </settings>
    </system.net>
    </configuration>
    http://forums.microsoft.com/MSDN/ShowPost....69&SiteID=1

    2. А почему бы и нет? Вот, держи линк на пример:
    http://www.heikniemi.net/hc/archives/000150.html
    http://www.heikniemi.net/hc/archives/files/httpupload.zip
     
  8. DZX

    DZX Гость

    Проблему с вылезающей ошибкой решил,
    путем прописывания параметров HttpWebRequest
    Код (Text):
    req.KeepAlive = false;
    req.AllowWriteStreamBuffering = true;
    req.SendChunked = true;
    Ну и длинну контента конечно добавил

    Как передать один файл есть примеры но вот чтобы и
    параметры и пару файлов в придачу и все одной кучей
    не знаю :(

    И еще при передаче post запроса у меня теряются куки
    почему то, get все ok, цепляет, а в посте заливаю
    строку и потом принимаю ответ и по ответу вижу
    что куки потерялись :(, где портачу?
    Код (Text):
    HttpWebRequest req=(HttpWebRequest)WebRequest.Create(url);

    // сохраняю куки для следующих зпросов Get подхватывае, а post :(
    // вернее они вроде есть, а сервер не видит

    if (cookie == null)
    {
    req.CookieContainer = new CookieContainer();
    cookie = req.CookieContainer;
    }
    else
    req.CookieContainer = cookie;

    req.Method="POST";
    req.KeepAlive = false;
    req.AllowWriteStreamBuffering = true;
    req.SendChunked = true;
    req.ContentType = "application/x-www-form-urlencoded";

    // составляю строку из NameValueCollection (PostParams) (параметры перекодированы для запроса)
    string post=string.Empty;
    for(int i=0;i<PostParams.Count;i++)
    {
    if(post==string.Empty)
    post=PostParams.GetKey(i)+"="+PostParams.Get(i);
    else
    post+="&"+PostParams.GetKey(i)+"="+PostParams.Get(i);
    }

    byte[] buffer=Encoding.UTF8.GetBytes(post);
    req.ContentLength = buffer.Length;

    Stream wstrem=req.GetRequestStream();
    wstrem.Write(buffer,0,buffer.Length);
    wstrem.Close();

    HttpWebResponse res = (HttpWebResponse)req.GetResponse();

    Stream strem = res.GetResponseStream ();

    StreamReader rstrem = new StreamReader (strem, Encoding.Default);
    string reply=rstrem.ReadToEnd();
    res.Close();rstrem.Close();
     
  9. Pasha

    Pasha Гость

    <!--QuoteBegin-DZX+6:01:2007, 18:44 -->
    <span class="vbquote">(DZX @ 6:01:2007, 18:44 )</span><!--QuoteEBegin-->Как передать один файл есть примеры но вот чтобы и
    параметры и пару файлов в придачу и все одной кучей
    не знаю
    [snapback]52435" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Разделитель "--{boundary}" можно повторять несколько раз, сначала для параметров, потом для файлов.
    http://www.faqs.org/rfcs/rfc1867.html, раздел Expamles.

    По поводу cookies - напиши сервер-заглушку. И проверь, приходят они туда или нет.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей