Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > http запрос в 1-2 строки


Автор: ShadowDancer 6.1.2010, 18:17
День добрый! Я пришел из мира Delphi с его TIdHTTP.
Если мне хотелось получить страницу, то мне было необходимо было сделать одно обращение IdHTTP.Get('http://ya.ru');
Если я захотел бы отправить данные, то код увеличился бы не намного IdHTTP.Post('http://serv.ru/post.php', SL);, где SL - объект с параметрами.
В C#, стандартными средствами нужно определять множество настроек, перед тем как сделать запрос.
А есть ли какая-либо библиотека или класс, чтобы упростить мне жизнь и выполнять запросы как и в Delphi, за одну-две строки?
Спасибо!

Автор: ShadowDancer 7.1.2010, 04:04
Для удобной и быстрой работы с GET-запросами нашел класс HTTPGet - http://www.goldb.org/httpgetcsharp.html
Теперь осталось найти класс для POST запросов.

Автор: jonie 7.1.2010, 21:21
имхо судя по коду плохой класс
Этот метод:
Код

    private string GetEscapedBody()
    {  // HTML escaped chars
...

легко заменяется на HttpUtility.UrlEncode, HttpUtility.UrlPathEncode, System.Web.HttpUtility.HtmlDecode....

Автор: ivashkanet 8.1.2010, 09:38
http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx

Автор: ShadowDancer 9.1.2010, 15:48
Да, WebClient - это хорошо, но он ведь не поддерживает Cookies?
В самом вопросе я ничего не сказал о поддержке кук, но они нужны...

Автор: nikitao 9.1.2010, 18:59
HttpWebRequest и HttpWebResponse.

Автор: ShadowDancer 11.1.2010, 08:29
Вопрос задавал, видимо из очень большой лени, т.к. хотелось все и сразу, да еще и с рюшечками. Код пришлось писать самому.

Код

private string hGet(string url, CookieContainer coo)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@url);
            //CookieContainer cookies = new CookieContainer();
            request.CookieContainer = coo;

            request.Method = "GET";

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            coo = request.CookieContainer;
            System.IO.Stream stream = response.GetResponseStream();
            System.IO.StreamReader sr = new System.IO.StreamReader(stream, Encoding.UTF8);

            return sr.ReadToEnd();
        }

private string hPost(string url, string pData, CookieContainer coo)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@url);
            request.CookieContainer = coo;

            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";

            byte[] sentData = Encoding.UTF8.GetBytes(pData);
            request.ContentLength = sentData.Length;

            System.IO.Stream sendStream = request.GetRequestStream();
            sendStream.Write(sentData, 0, sentData.Length);
            sendStream.Close();

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            coo = request.CookieContainer;
            System.IO.Stream stream = response.GetResponseStream();
            System.IO.StreamReader sr = new System.IO.StreamReader(stream, Encoding.UTF8);

            return sr.ReadToEnd();
        }


Пример вызова такого кода, как я хотел:

Код

CookieContainer cookie = new CookieContainer();
hGet("http://bobrdobr.ru", cookie);
string ans = hPost("http://bobrdobr.ru/login/", "username="+login+
"&password="+pass+"&remember_user=on&next=/", cookie);


Тут куки сами обновляются, как я и хотел + с запросами теперь работать очень легко (ага, как в TIdHTTP).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)