Доброго времени.. Столкнулся тут с проблемой написания постов в ВК группу с помощью кода без API.. суть в том что постить получается, но вот постится только 2 раза... может где-то в коде продолбался... подскажите плз Ну и соль в том, что нужно делать именно запросами, а не через АПИ, почему думаю сами поняли Code: public string Login(string url, string postData) //Возвращает содержимое поданной страницы { string HTML = ""; Regex rex1 = new Regex("remixsid=(.*?);", RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); if (url == "0") return "0"; //Проверка на ошибку HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); //myHttpWebRequest.Proxy = new WebProxy("127.0.0.1", 8888); if (!String.IsNullOrEmpty(postData)) myHttpWebRequest.Method = "POST"; myHttpWebRequest.Referer = "https://vk.com"; myHttpWebRequest.UserAgent = "Mozila/14.0 (compatible; MSIE 6.0;Windows NT 5.1; SV1; MyIE2;"; myHttpWebRequest.Accept = "image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword"; myHttpWebRequest.Headers.Add("Accept-Language", "ru"); myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; myHttpWebRequest.KeepAlive = false; // передаем Сookie, полученные в предыдущем запросе if (!String.IsNullOrEmpty(this.remixsid)) { lastCookies = "remixchk=5;remixsid=" + this.remixsid; } if (!String.IsNullOrEmpty(lastCookies)) { myHttpWebRequest.Headers.Add(System.Net.HttpRequestHeader.Cookie, lastCookies); } // ставим False, чтобы при получении кода 302, не делать // автоматического перенаправления myHttpWebRequest.AllowAutoRedirect = false; // передаем параметры string sQueryString = postData; byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString); //Вконтакте использует кирилическую кодировку try { if (!String.IsNullOrEmpty(postData)) { myHttpWebRequest.ContentLength = ByteArr.Length; myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length); }; // делаем запрос HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); StreamReader myStreamReader; //Сохраняем Cookie lastCookies = String.IsNullOrEmpty(myHttpWebResponse.Headers["Set-Cookie"]) ? "" : myHttpWebResponse.Headers["Set-Cookie"]; Match matc1 = rex1.Match(lastCookies); //Если есть имя сессии, то подменяем Cookie if (matc1.Groups.Count == 2) { this.remixsid = matc1.Groups[1].ToString(); lastCookies = "remixchk=5;remixsid=" + this.remixsid; } if (myHttpWebResponse.Headers["Content-Type"].IndexOf("windows-1251") > 0) { myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding("windows-1251")); } else { myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.UTF8); } HTML = myStreamReader.ReadToEnd(); if (HTML == "") //Проверяем на редирект { HTML = this.GetHtml(myHttpWebResponse.Headers["Location"].ToString(), ""); } } catch (Exception err) { //Ошибка в чтении страницы return "0"; } return HTML; } public string PostMessage(string url, string idGroup, string postMessage) //Возвращает содержимое поданной страницы { string HTML = ""; Regex rex1 = new Regex("remixsid=(.*?);", RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); if (url == "0") return "0"; //Проверка на ошибку HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); //myHttpWebRequest.Proxy = new WebProxy("127.0.0.1", 8888); if (!String.IsNullOrEmpty(idGroup)) myHttpWebRequest.Method = "POST"; myHttpWebRequest.Referer = "https://vk.com/" + idGroup; myHttpWebRequest.UserAgent = "Mozila/14.0 (compatible; MSIE 6.0;Windows NT 5.1; SV1; MyIE2;"; myHttpWebRequest.Accept = "image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword"; myHttpWebRequest.Headers.Add("Accept-Language", "ru"); myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; myHttpWebRequest.KeepAlive = false; lastCookies = "remixchk=5;remixsid=" + this.remixsid; myHttpWebRequest.Headers.Add(System.Net.HttpRequestHeader.Cookie, lastCookies); // передаем параметры string sQueryString = postMessage; byte[] ByteArr = System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString); //Вконтакте использует кирилическую кодировку try { if (!String.IsNullOrEmpty(postMessage)) { myHttpWebRequest.ContentLength = ByteArr.Length; myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length); }; // делаем запрос HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); } catch (Exception err) { //Ошибка в чтении страницы return "0"; } return HTML; } Ну и вот вызов для написания поста, пытаюсь написать одно и тоже сообщение 4 раза, но почему-то всегда постится только 2... думал связанно было с тем что одинаковое, но начал генерить и подставлять символы разные.. всеравно Code: for (int i = 0; i < 4; i++) { string post = "Message=" + messageTB.Text + "" + i + "&act=post&al=1&facebook_export=&fixed=&friends_only=&from=&hash=" + hash + "&official=&signed=&status_export=&to_id=-" + GruopNum + "&type=all"; http.PostMessage("https://vk.com/al_wall.php", groupID.Text, post); Thread.Sleep(1000); } Подскажите плз...
не, я проверял... я отсылал за 5 сек в ВК 10 одинаковых сообщения, и ничего не вылазило + запрос один и тот же шлется... зависает на этом месте Code: myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length); которое находится в методе PostMessage, я от туда уже и проверку if (!String.IsNullOrEmpty(postData)) убрал... но все так же..
Может потому что надо закрывать поток? Судя по коду вам бы не помешало бы RTFM IDisposable & using. Поскольку POST запрос и HttpWebRequest вангую еще одну потенциальную проблему - .ServicePoint.Expect100Continue = false;