Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / POST запрос к asp.net странице из С# / 6 сообщений из 6, страница 1 из 1
03.02.2010, 23:25
    #36448296
unklave
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POST запрос к asp.net странице из С#
Доброго времени суток,
собственное сабж...
Главное отличие от обычного post запроса заключается в использовании поля _VIEWSTATE. Поэтому такой код у меня не работает(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
       public string PostRequest()
       {
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(address);
            // Разрешаем авторедирект
            httpWebRequest.AllowAutoRedirect = true;
            // Создаем для запроса новый контейнер для хранения сессий
            httpWebRequest.CookieContainer = new CookieContainer();
            // Следующие строки итак понятны
            httpWebRequest.Method = "POST";
            httpWebRequest.ContentType = "application/x-www-form-urlencoded";
            // Переть тем как заполнять поля формы, текст конвертируем в байты
            byte[] ByteQuery = System.Text.Encoding.ASCII.GetBytes("Здесь какие-то параметры");
            // Длинна запроса (обязательный параметр)
            httpWebRequest.ContentLength = ByteQuery.Length;
            // Открываем поток для записи
            Stream QueryStream = httpWebRequest.GetRequestStream();
            // Записываем в поток (это и есть POST запрос(заполнение форм))
            QueryStream.Write(ByteQuery,  0 , ByteQuery.Length);
            // Закрываем поток
            QueryStream.Close();
            // Объект с ответом сервера
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            // Присваиваем сессию
            httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);
            if (httpWebResponse.Cookies != null)
            {
                // Добавляем сессию в наш контейнер для дальнейшего использования
                Cooks.Add(httpWebResponse.Cookies);
            }
            // Открываем поток для чтения
            Stream stream = httpWebResponse.GetResponseStream();
            // Читаем из потока
            StreamReader reader = new StreamReader(stream);
            // Возвращаем результат запроса
            return reader.ReadToEnd();
        }
...
Рейтинг: 0 / 0
04.02.2010, 11:22
    #36448964
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POST запрос к asp.net странице из С#
Вам надо форму отправить? Если да, то могу подкинуть ссылку на реализацию
...
Рейтинг: 0 / 0
04.02.2010, 13:35
    #36449481
unklave
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POST запрос к asp.net странице из С#
В общем то да.
Есть форма, мне ее надо заполнить и отправить)

Буду благодарен за полезные ссылки
...
Рейтинг: 0 / 0
04.02.2010, 14:52
    #36449758
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POST запрос к asp.net странице из С#
Ссылок не нашел, но у меня есть код делающий это (вроде очистил от лишнего):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
 
private const string Boundary = "xYzZY";
//собираем форму в текстовом виде, параметры задаются в виде словаря .<имя параметра, значение>
 private static BinaryContainer GetPostData(IDictionary<string, string> Params, HttpFileCollectionBase files)
        {
            const string boundary = "--" + Boundary;

            BinaryContainer container = new BinaryContainer(Encoding.UTF8);

            //I do this because adding element to collection can produce unexpected side effects
            foreach (KeyValuePair<string, string> par in Params)
            {
                container.WriteLine(boundary);
                container.WriteLine(string.Format("Content-Disposition: form-data; name=\"{0}\"", par.Key));
                container.WriteLine();
                container.WriteLine(par.Value);
            }
            if (files != null)
                foreach (string sfile in files)
                {
                    var file = files[sfile];
                    container.WriteLine(boundary);
                    container.WriteLine(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"",
                                                      sfile,
                                                      file.FileName));
                    container.WriteLine(string.Format("Content-Type: {0}", file.ContentType));
                    container.WriteLine();
                    byte[] bytes = new byte[file.ContentLength];
                    file.InputStream.Read(bytes, 0, bytes.Length);
                    container.Write(bytes);
                    container.WriteLine();
                }


            container.WriteLine(boundary);
            return container;
        }

public static string PostRequestToServerWithSpecifiedHash(string ServiceURL,  IDictionary<string, string> Params,
            HttpFileCollectionBase fileCollection)

        {
            //url for routing testing. May be better put it to config
            string url = ServiceURL;
            HttpWebRequest req =  (HttpWebRequest)WebRequest.Create(url);
            req.KeepAlive = true;
            req.Method = "POST";

            var binaryContainer = GetPostData(Params, fileCollection);
            req.ContentLength = binaryContainer.Length;
            req.ContentType = "multipart/form-data;boundary=" + Boundary;
            
            Stream reqst = req.GetRequestStream(); // add form data to request stream
            binaryContainer.Flush(reqst);

            reqst.Flush();
            reqst.Close();

            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            Stream resst = res.GetResponseStream();

            StreamReader sr = new StreamReader(resst);
            string response = sr.ReadToEnd();

            return response;
        }
...
Рейтинг: 0 / 0
06.02.2010, 20:58
    #36453633
unklave
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POST запрос к asp.net странице из С#
Спасибо. Правда похожий код у меня уже был)
Ответ сам нашел. Оказывается нужно для каждой последующей страницы передавать полученный со страницы _VIEWSTATE и добавлять к нему уже нужные параметры, для этого можно использовать код выше.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
21.03.2011, 17:27
    #37175890
mletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POST запрос к asp.net странице из С#
Как раз сам ищу нечто похожее. Не подскажете, как сделать аналогично выше приведенному коду, но чтобы и в браузере отображалась страница, куда передаются данные из формы через POST.

Если более конкретно, то задача выглядит так:
Есть форма, на форме капча, которая проверяется на сервере, и только после проверки капчи данные надо отправлять на сторонний сервис с открытием страницы это сервиса, которая выдает результаты обработки переданных параметров. Короче, двойной POST.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / POST запрос к asp.net странице из С# / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]