HttpWebRequest, авторизация на сайте: Нужно ли прописывать Headers, UserAgent в каждом запросе - C#
Формулировка задачи:
Всем привет!
Пытаюсь пройти авторизацию на сайте http://ru.grepolis.com
Для этого нужно отправить несколько Get и Post запросов, возникло несколько вопросов:
1. При отправке запросов я формирую заголовки (Headers), UserAgent и т.д. Вопрос: мне нужно подставлять эти значения в в каждый запрос или как-нибудь можно это сделать удобнее?
2. Мне нужно отправить Post запрос с данными в Json формате.
Как это сделать? Гуглил, но не смог разобраться в примерах, как-то везде все по разному.
Вот что имею на данный момент:
HttpWebRequest request;
try
{
//Первый Get запрос
request = (HttpWebRequest)HttpWebRequest.Create("http://ru.grepolis.com");
request.UserAgent = "Mozila/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2;";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
//Post запрос
request = (HttpWebRequest)HttpWebRequest.Create("http://ru.grepolis.com/start/index?action=login_from_start_page");
request.Method = "POST";
request.referer='http://ru.grepolis.com'
request.UserAgent = "Mozila/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2;";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3");
request.ContentType = "application/x-www-form-urlencoded";
request.AllowAutoRedirect = true;
// Формируем строку с параметрами
//Вот тут ВОПРОС:
???????????????
// передаем параметры
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
// Записываем данные в поток
request.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
// делаем запрос
request myHttpWebResponse = (HttpWebResponse)request.GetResponse();
}
catch (Exception)
{
MessageBox.Show("Не могу загрузить файл");
return;
}
StringBuilder pagebuilder = new StringBuilder();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string line;
while ((line = reader.ReadLine()) != null)
pagebuilder.AppendLine(line);
response.Close();
reader.Close();
pageRichTextBox.Text = pagebuilder.ToString();Решение задачи: «HttpWebRequest, авторизация на сайте: Нужно ли прописывать Headers, UserAgent в каждом запросе»
textual
Листинг программы
private void BugFix_CookieDomain(CookieContainer cookies)
{
Type containerType = typeof (CookieContainer);
var table = (Hashtable) containerType.InvokeMember("m_domainTable",
BindingFlags.NonPublic |
BindingFlags.GetField |
BindingFlags.Instance,
null,
cookies,
new object[] {});
var keys = new ArrayList(table.Keys);
foreach (string keyObj in keys)
{
string key = (keyObj);
if (key[0] == '.')
{
string newKey = key.Remove(0, 1);
table[newKey] = table[keyObj];
}
}
}