Robert Welliever
Обыскав сотни сайтов, я мог бы не согласиться с вашей тактикой попытки использовать боты для управления страницей. Вместо этого вы можете вручную создать свой POST-запрос и соответствующим образом заполнить контент / полезную нагрузку. Например, в Google Chrome перейдите на страницу, с которой нужно запустить POST-запрос. На этой странице щелкните правой кнопкой мыши и выберите «проверить». Затем щелкните вкладку «Сеть», чтобы просмотреть все запросы. Выполните POST вручную, а затем щелкните этот запрос в появившемся списке сетевой активности. Щелкните вкладку «Заголовки» справа, чтобы увидеть все заголовки. При запросе типа POST вы увидите раздел «Данные формы». Это контент POST, который вы хотите захватить. Вы должны вставить это как шаблон в свой собственный запрос POST. Так, например, чтобы вставить свою дату в контент, ваша процедура может выглядеть примерно так:
public static HttpWebRequest CreatePOSTRequest(string url, DateTime someDate)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("someURL");
request.Method = "POST";
string payload = "somepastedcontent;somedatevalue=" +
someDate.ToString() +
";somemoretemplatestuff";
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(payload);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
using (System.IO.Stream dataStream = request.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
}
return request;
}
Обратите внимание, что вам нужно будет установить вышеуказанный запрос.ContentType-тип контента вашей цели, указанный в заголовках. Затем, чтобы выполнить вышеуказанный веб-запрос, вы делаете что-то вроде:
string responseText;
WebResponse response = (HttpWebResponse)request.GetResponse();
using (Stream stream = response.GetResponseStream()) {
using (StreamReader reader = new StreamReader(response.GetResponseStream(),
System.Text.ASCIIEncoding.UTF8))
{
responseText = _ConditionResponse(reader.ReadToEnd());
}
}
Я был бы рад оказать конкретную помощь, если вы предоставите страницу, которую хотите очистить. В противном случае удачи!
mjackson11
Сначала я попробовал этот подход. Я смог изменить данные поста, но сайт возвращается с неопределенной ошибкой. Никакого кода или объяснения. Предположение, что viewstate не соответствует сообщению, и оно вышвырнуло его. Кроме того, похоже, что они поместили на страницу какой-то генератор случайных чисел, чтобы действительно затруднить имитацию поста.
Думая, что мне, возможно, придется вручную пройти через всю java на странице и выяснить, как имитировать действия выбора даты.
Robert Welliever
У меня большой опыт работы с тем, что вы описываете, и я обещаю, что это правильное решение. Вам просто нужно захватить и разобрать страницу, необходимую для вашего поста. Какой ресурс вы пытаетесь наскрести? Если я не смогу дать вам оптимальное решение через двадцать минут после того, как прочитаю ваше сообщение, вы можете получить свои деньги обратно.