Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

с# HttpWebRequest

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C# только в данном разделе

Ответ
 
Опции темы
Старый 22.12.2011, 17:22   #1
 Разведчик
Аватар для God_of_dark
 
God_of_dark никому не известный тип
Регистрация: 31.08.2010
Сообщений: 32
Популярность: 12
Сказал(а) спасибо: 40
Поблагодарили 1 раз в 1 сообщении
 
Question с# HttpWebRequest

Пытаюсь написать автологинер для браузерной игры heroeswm.ru. Написал класс для повседневной отправки запросов и получения ответов. На любых других сайтах он работает отменно, но для этого всё как то очень странно. Запуская программу первый раз с обычным GET запросом главной страницы получаю ответ, но далее приходит абсолютно рандомная хрень. Именно со второго раза и далее. У меня вообще идей нет, почему это происходит.

Вот код класса отправки\принятия сообщений:

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace WebManager
{
    class WebConstants
    {
        public static readonly string ContentType = "application/x-www-form-urlencoded";
        public static readonly string UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7";
        public static readonly string Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    }

    public class WebSession
    {
        private string main_site;
        private CookieContainer cook;

        public string user_agent;
        public string referer;

        public WebSession()
        {
            cook = new CookieContainer();
        }

        public WebSession(string site)
            : this()
        {
            main_site = site;
            user_agent = WebConstants.UserAgent;
            referer = "";
        }

        public string SendRequest(string path, string method, string options)
        {
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(main_site + path);
            
            req.Method = method;
            req.CookieContainer = cook;
            req.UserAgent = user_agent;

            if (method == "POST")
            {
                req.ContentType = WebConstants.ContentType;
                req.ContentLength = options.Length;

                Console.WriteLine(options);

                StreamWriter sw = new StreamWriter(req.GetRequestStream());
                sw.Write(options);
                sw.Close();
            }

            HttpWebResponse resp = (HttpWebResponse) req.GetResponse();

            Console.WriteLine(req.HaveResponse);

            StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding(1251));
            string result = sr.ReadToEnd();
            sr.Close();

            cook = req.CookieContainer;

            return result;
        }
    }
}
запускаю я его просто:

Код:
namespace Debug
{
    class Program
    {
        static void Main(string[] args)
        {
            WebSession sess = new WebSession("http://heroeswm.ru");
            string res = sess.SendRequest("", "GET", "");

            Console.WriteLine(res);
        }
    }
}
На с# пишу недавно, очень прошу разобраться, приму любую критику))
  Ответить с цитированием
Старый 22.12.2011, 19:01   #2
 Разведчик
Аватар для •theSaboteur•
 
•theSaboteur• скоро будет известен•theSaboteur• скоро будет известен•theSaboteur• скоро будет известен
Регистрация: 14.07.2011
Сообщений: 27
Популярность: 244
Сказал(а) спасибо: 26
Поблагодарили 47 раз(а) в 37 сообщениях
Отправить сообщение для •theSaboteur• с помощью ICQ
 
По умолчанию Re: с# HttpWebRequest

Если "рандомная хрень" приходит только с этого узла, то имеет смысл посмотреть что шлет сервер тебе при первом коннекте, а именно проглядеть заголовки, куки в частности.
________________
Ну что лежишь ты Мурка, на краю дороги
Гробоваая крыышкаа над тобооой
  Ответить с цитированием
Старый 22.12.2011, 19:18   #3
 Разведчик
Аватар для God_of_dark
 
God_of_dark никому не известный тип
Регистрация: 31.08.2010
Сообщений: 32
Популярность: 12
Сказал(а) спасибо: 40
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: с# HttpWebRequest

Возможно я непонятно выразился: Сама программа состоит только из посылки GET запроса и вывода ответа на экран. Первый запуск программы - получаю адекватный ответ. Второй запуск - тоже адекватный ответ. Все последние - несусветная фигня. Куукисы я сохраняю и прикрепляю к запросам. По сути, последующие запуски от первого зависеть не должны. Может, на стороне сервера защита от ботов?) Сталкивался кто нибудь, и может знает как это решить?)))

Добавлено через 22 часа 36 минут
В общем ответ я нашёл, но довольно странный: если заполнить поле Host у HttpWebReqwest, то всё работает как по маслу. Вот только заполнять надо не "heroeswm.ru", как нам подсказывает здравый смысл, а каким то другим сайтом.

Последний раз редактировалось God_of_dark; 23.12.2011 в 17:55. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 17:34.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net