Автор темы
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
К курсу →
- Статус
- Закрыто для дальнейших ответов.
Автор темы
Можно, примерно так:
и использовать тот же CookieContainer для всех запросов.
Код:
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(myURI);
request.CookieContainer = new CookieContainer();
А, что вы можете сказать конкретно про WebClient, он помойму сбоку от HttpWebRequest и возможно ли распространить это на него?
Если очень надо именно WebClient, то:
взято с http://channel9.msdn.com/rss.aspx?threadID=166252
Код:
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
Понаглею и воспользуюсь еще советами
1. При попытке передать post-ом через HttpWebRequest на сервер
параметры выкидывает с ошибкой
The server committed a protocol violation. Section=ResponseStatusLine
Встречал совет KeepAlive в false установить - не помогает.
2. Можно ли передавать в параметрах так же файлы, ну типа
отправлять на сервер в составе post запроса?
1. При попытке передать post-ом через HttpWebRequest на сервер
параметры выкидывает с ошибкой
The server committed a protocol violation. Section=ResponseStatusLine
Встречал совет KeepAlive в false установить - не помогает.
2. Можно ли передавать в параметрах так же файлы, ну типа
отправлять на сервер в составе post запроса?
Да на здоровье:
1. Попробуй впиши в конфиг приложения:
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
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
Проблему с вылезающей ошибкой решил,
путем прописывания параметров HttpWebRequest
Ну и длинну контента конечно добавил
Как передать один файл есть примеры но вот чтобы и
параметры и пару файлов в придачу и все одной кучей
не знаю
И еще при передаче post запроса у меня теряются куки
почему то, get все ok, цепляет, а в посте заливаю
строку и потом принимаю ответ и по ответу вижу
что куки потерялись
, где портачу?
путем прописывания параметров 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();
<!--QuoteBegin-DZX+6:01:2007, 18:44 -->
<span class="vbquote">(DZX @ 6:01:2007, 18:44 )</span><!--QuoteEBegin-->Как передать один файл есть примеры но вот чтобы и
параметры и пару файлов в придачу и все одной кучей
не знаю
Разделитель "--{boundary}" можно повторять несколько раз, сначала для параметров, потом для файлов.
http://www.faqs.org/rfcs/rfc1867.html, раздел Expamles.
По поводу cookies - напиши сервер-заглушку. И проверь, приходят они туда или нет.
<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 - напиши сервер-заглушку. И проверь, приходят они туда или нет.
- Статус
- Закрыто для дальнейших ответов.
Ещё по теме
4
Поделиться: