Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > [C#] Post запрос на форум


Автор: Rivus 23.5.2012, 18:12
Добрый день, форумчане. 

Допустим, есть форум на IPB, у него имеется логин форма. 
Путём сниффера, раздобыл, что отправляются 4 значения : 
referer - с какого сайта мы пришли на страницу логина
username - само собой
password - само собой
rememberMe - запоминание

В хедеры прописывается только "Content-Type". 

Код. Отправляем запрос : 
Код

WebRequest wRequest = WebRequest.Create(url);
            wRequest.Method = "POST";
            wRequest.Timeout = 10000;
            wRequest.ContentType = "application/x-www-form-urlencoded";
            byte[] sendData = Encoding.GetEncoding(1251).GetBytes("referer:" + ""  + "\nusername:" + HttpUtility.UrlEncode(user) + "\npassword:" + HttpUtility.UrlEncode(pass));
            wRequest.ContentLength = sendData.Length;
            Stream sendStream = wRequest.GetRequestStream();
            sendStream.Write(sendData, 0, sendData.Length);
sendStream.Close();

Забираем ответ : 
Код

            WebResponse response = wRequest.GetResponse();    
            sendStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(sendStream);
            string responseFromServer = reader.ReadToEnd();
            lastResponse = responseFromServer;
            reader.Close();
            sendStream.Close();
            response.Close();


Результатом моего запроса каждый раз является просто код страницы. Без сообщений об ошибках или чём либо. Что и где сделано не так как надо? 


из логин формы : 

Код

            <input type="hidden" name="referer" value="http://google.com/">
            <div id="regular_signin">
                <a id="_regularsignin"></a>
                <h3 class="bar">Enter your sign in name and password</h3>
                <ul>
                    <li class="field">
                        <label for="username">Username:</label>
                        <input id="username" type="text" class="input_text" name="username" size="25">
                    </li>
                    <li class="field">
                        <label for="password">Password:</label>
                        <input id="password" type="password" class="input_text" name="password" size="25"><br>
                    </li>
                </ul>
            </div>
            <hr>
            <fieldset id="signin_options">
                <legend>Sign in options</legend>
                <ul>
                    <li class="field checkbox">
                        <input type="checkbox" id="remember" checked="checked" name="rememberMe" value="1" class="input_check">
                        <label for="remember">
                            Remember me<br>
                            <span class="desc">This is not recommended for shared computers</span>
                        </label>
                    </li>
                        <li class="field checkbox">
                            <input type="checkbox" id="invisible" name="anonymous" value="1" class="input_check">
                            <label for="invisible">
                                Sign in anonymously<br>
                                <span class="desc">Don't add me to the active users list</span>
                            </label>
                        </li>
                    
                </ul>
            </fieldset>
            <fieldset class="submit">
                <input type="submit" class="input_submit" value="Sign In">
            </fieldset>

Автор: Экскалупатор 23.5.2012, 20:21
можно использовать контрол браузер. грузить в него страницу, и эмулировать действия пользователя, т.е. вводить значения, жамкать на кнопки и прочее. так будет проще намного.

Автор: Rivus 23.5.2012, 20:30
Цитата(Экскалупатор @  23.5.2012,  20:21 Найти цитируемый пост)
можно использовать контрол браузер. грузить в него страницу, и эмулировать действия пользователя, т.е. вводить значения, жамкать на кнопки и прочее. так будет проще намного.

Да, но это будет куда дольше по времени.. 

Автор: Экскалупатор 23.5.2012, 22:51
"дольше" - это измерение в попугаях. с чего ты это взял? пол секунды решит что то? да нужно будет дождаться сначала загрузки страницы, зато ты будешь уверен(с какой то долей вероятности), что загрузятся скрипты и выполняться, т.е. все будет так как задумал владелец сайта. а в итоге будет меньше гемора.

Цитата

"referer:" + ""  + "\nusername:" + HttpUtility.UrlEncode(user) + "\npassword:" + HttpUtility.UrlEncode(pass)

ты уверен что сервер ждет именно в таком виде данные? особенно меня смущают "\n". хз почему, но у меня есть стойкая уверенность, что должно быть не так.

Автор: Rivus 24.5.2012, 00:37
Цитата(Экскалупатор @  23.5.2012,  22:51 Найти цитируемый пост)
ты уверен что сервер ждет именно в таком виде данные? особенно меня смущают "\n". хз почему, но у меня есть стойкая уверенность, что должно быть не так.

А как узнать какой правильный формат? 

Хром выдаёт всё вот так: 

Код

Form Data:
referer:http://google.com
username:asdas
password:sadas
rememberMe:1

И если не "\n", то что? 

Автор: diadiavova 24.5.2012, 08:14
Цитата(Rivus @  23.5.2012,  19:12 Найти цитируемый пост)
Без сообщений об ошибках или чём либо.

Чтобы получать сообщения об ошибках надо  установить AllowAutoRedirect= false. А вообще, трудно что-либо сказать, по такому краткому описанию того, что отправляет браузер серверу и что получает в ответ. 
Цитата(Экскалупатор @  23.5.2012,  21:21 Найти цитируемый пост)
можно использовать контрол браузер.

Браузер грузит много лишнего и его поведение трудно контролировать. Это не всегда хорошее решение, в тех случаях, когда нужно выполнять скрипты на стороне клиента он может помочь, в остальных лучше избегать его использования.

Автор: Bestoloch 30.5.2012, 14:17
Цитата(Rivus @  23.5.2012,  22:37 Найти цитируемый пост)
А как узнать какой правильный формат? 

http://www.fiddler2.com/fiddler2/ в помощь. Там увидишь что и в каком виде приходит/отправляется.

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