Как я могу удаленно удалять сообщение Qaru с С#?

Возможно, я пытаюсь сделать что-то невозможное или очень тяжелое, но я все равно хотел попробовать. Я работал над написанием программы, которая может автоматически уменьшать записи Qaru для меня.

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

Затем я решил, что должен удаленно свернуть его, если я напишу программу на С#, которая отправит HTTP-запрос, идентичный тому, который я отправил, когда я нажал кнопку downvote. Поэтому я придумал это:

WebRequest req = WebRequest.Create("http://stackoverflow.com/posts/3905734/vote/3");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = 37;
req.Headers.Add("Request", "POST /posts/3905734/vote/3 HTTP/1.1");
req.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01");
req.Headers.Add("X-Requested-With", "XMLHttpRequest");
req.Headers.Add("Referer", "http://stackoverflow.com/questions/3905734/how-to-send-100-000-emails-weekly");
req.Headers.Add("Accept-Language", "en-us");
req.Headers.Add("Accept-Encoding", "gzip, deflate");
req.Headers.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)");
req.Headers.Add("Host", "stackoverflow.com");
req.Headers.Add("Connection", "Keep-Alive");
req.Headers.Add("Cache-Control", "no-cache");
req.Headers.Add("Cookie", "__utmc=140029553; __utma=140029553.1661295586.1330352934.1331336368.1331402208.44; __utmz=140029553.1331159433.33.7.utmcsr=meta.stackoverflow.com|utmccn=(referral)|utmcmd=referral|utmcct=/users/153008/cody-gray; __qca=P0-1737884911-1330352934366; usr=t=TJUTES9CakOu&s=f3MgHSwW2EWk; km_ai=91003; km_uq=; km_lv=x; km_ni=91003; __utmb=140029553.17.10.1331402208");
var requestMessage = Encoding.UTF8.GetBytes("fkey=abfd538253d7ca1e988f306ea992eda0");
var strm = req.GetRequestStream();
strm.Write(requestMessage, 0, requestMessage.Length);
strm.Close();
var rep = req.GetResponse();
strm = rep.GetResponseStream();
var rdr = new StreamReader(strm);
string responseFromServer = rdr.*********();
Console.WriteLine(responseFromServer);
rdr.Close();
strm.Close();
Console.Read();

Были некоторые заголовки, которые я бы не стал писать. Для заголовков Accept, Referer, User-Agent и Connection он выдал такую ​​ошибку:

Этот заголовок должен быть изменен с использованием соответствующего свойства или метода.

а заголовок Host вызвал эту ошибку:

Заголовок "Host" не может быть изменен напрямую.

Я просто прокомментировал заголовки, которые вызывают проблемы, с оптимизмом надеясь, что он все равно будет работать, но я получил это сообщение с сервера

{"Success":false,"Warning":false,"NewScore":0,"Message":"","Refresh":false}

"Success":false, казалось, указывал на то, что он не успел запустил сообщение, и я пошел на страницу, и у него был тот же подсчет голосов, что и до того, как я запустил программу. Другими словами, моя программа не работала.

Знает ли кто-нибудь, правильно ли я нахожусь на правильном пути, что я могу сделать, чтобы заставить его работать, или если он даже может заставить его работать?

1 ответ

Вы можете не считать это ответом, но я это делаю; то, что вы пытаетесь сделать, считается злоупотреблением системой. Мы не предоставляем API для этого по многим причинам, и попытка перепроектировать что-то, что не является частью опубликованного API, является... неприятным.

Спасибо, что разместили свои файлы cookie безопасности. Таким образом, я нажму кнопку, чтобы вывести вас из SE, чтобы защитить вашу учетную запись от злоупотреблений. Вы сможете войти в систему как обычно.

Мы оставляем за собой право быть откровенно ребяческим и ребяческим, если вы настаиваете на попытке злоупотребления системой; мы всегда рады представить дополнительные обручи и препятствия, случайное изменение API и т.д., если мы считаем, что вы пытаетесь сделать неприятные вещи. Или просто приостановите учетную запись или заблокируйте доступ к сети.

Позвольте мне подвести итог: мы действительно не хотим, чтобы вы это делали.

licensed under cc by-sa 3.0 with attribution.