Cookie

  • Автор темы DZX
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D
#1
Возможно ли включить поддержку cookie в WebClient, по умолчанию они выключены?
 
P

Pasha

#2
Можно, примерно так:
Код:
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(myURI);
request.CookieContainer = new CookieContainer();
и использовать тот же CookieContainer для всех запросов.
 
D
#3
А, что вы можете сказать конкретно про WebClient, он помойму сбоку от HttpWebRequest и возможно ли распространить это на него?
 
P

Pasha

#4
Если очень надо именно WebClient, то:
Код:
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
 
D
#6
Понаглею и воспользуюсь еще советами
1. При попытке передать post-ом через HttpWebRequest на сервер
параметры выкидывает с ошибкой
The server committed a protocol violation. Section=ResponseStatusLine
Встречал совет KeepAlive в false установить - не помогает.
2. Можно ли передавать в параметрах так же файлы, ну типа
отправлять на сервер в составе post запроса?
 
P

Pasha

#7
Да на здоровье:
1. Попробуй впиши в конфиг приложения:
Код:
<?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
 
D
#8
Проблему с вылезающей ошибкой решил,
путем прописывания параметров HttpWebRequest
Код:
req.KeepAlive = false;
req.AllowWriteStreamBuffering = true;
req.SendChunked = true;
Ну и длинну контента конечно добавил

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

И еще при передаче post запроса у меня теряются куки
почему то, get все ok, цепляет, а в посте заливаю
строку и потом принимаю ответ и по ответу вижу
что куки потерялись :(, где портачу?
Код:
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();
 
P

Pasha

#9
<!--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 - напиши сервер-заглушку. И проверь, приходят они туда или нет.
 
Статус
Закрыто для дальнейших ответов.