POST запрос Вконтакте: разместить сообщение на стену - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, пришел на форум из-за проблемы, хочу написать программу на С#, которая отправляет сообщение на стену ( пока хотя бы так ) Ниже приведу код и скриншоты, пока готова только авторизация, почему-то постинг сообщений не хочет работать. 1.
 public string GET_http(string url)
        {
            System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
            System.Net.WebRequest reqGET = System.Net.WebRequest.Create(url);
            System.Net.WebResponse resp = reqGET.GetResponse();
            System.IO.Stream stream = resp.GetResponseStream();
            System.IO.StreamReader sr = new System.IO.StreamReader(stream);
            string html = sr.ReadToEnd();
            return html;
        }
2.
        public string http_post(string url, string data)
        {
            var cookies = new CookieContainer();
            ServicePointManager.Expect100Continue = false;
 
            var request = (HttpWebRequest)WebRequest.Create(url);
            request.CookieContainer = cookies;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            using (var requestStream = request.GetRequestStream())
            using (var writer = new StreamWriter(requestStream))
            {
                writer.Write(data);
            }
 
            using (var responseStream = request.GetResponse().GetResponseStream())
            using (var reader = new StreamReader(responseStream))
            {
                var result = reader.ReadToEnd();
                return result;
            }
        }
3. Это вход вконтакте
private void button2_Click(object sender, EventArgs e)
        {
            string html = GET_http("http://m.vk.com/");
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(html);
            HtmlNode bodyNode = doc.DocumentNode.SelectSingleNode("//div[@class='form_item fi_fat']/form");
            string act_url = bodyNode.Attributes["action"].Value;
 
            //Post Запрос
 
            string login = textBox1.Text;
            string pass = textBox2.Text;
            string data = "email=" + login + "&pass=" + pass;
            string result = http_post(act_url, data);
            textBox3.Text = result;
}
4.А теперь пост сообщения
private void button1_Click(object sender, EventArgs e)
        {

            string html = GET_http("http://m.vk.com/minecraft_publ");
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(html);
            HtmlNode bodyNode = doc.DocumentNode.SelectSingleNode("//div[@class='create_post create_post_extra']/form");
            string act_url = bodyNode.Attributes["action"].Value;
 
            //Post Запрос
            string data = "_ref=minecraft_publ&_tstat=group%2C11%2C0%2C161%2C21&message=%D0%9E%D1%81%D1%82%D0%B0%D0%BB%D1%8E%20%D1%8D%D1%82%D0%BE%20%D0%B7%D0%B4%D0%B5%D1%81%D1%8C%0A";
            string result = http_post(act_url, data);
            textBox3.Text = result;
        }
1 изображение - так выглядит программа 2 - авторизация проходит успешно ( получаем html со страницы ) 3 - вот эта ошибка Если я ошибся темой, скажите где написать. Если у вас есть другой способ авторизации (кроме API) расскажите, прошу.

Решение задачи: «POST запрос Вконтакте: разместить сообщение на стену»

textual
Листинг программы
using System;
using System.IO;
using System.Net;
using System.Text;
 
class Auth_VK
    {
        public Auth_VK(string login, string pass)
        {
            Cookie = cookie;
            string token = new StreamReader(WebRequest.Create("http://vk.com").GetResponse().GetResponseStream()).ReadToEnd();
            token = token.Remove(0, token.IndexOf("ip_h") + 5);
            token = token.Substring(0, token.IndexOf('&'));
            token = Uri.EscapeDataString(token);
            string URL = Uri.EscapeDataString("http://vk.com");
            login = Uri.EscapeDataString(login);
            pass = Uri.EscapeDataString(pass);
            string query = "act=login&role=al_frame&expire=&captcha_sid=&captcha_key=&_origin=" + URL + "&ip_h=" + token + "&email=" + login + "&pass=" + pass;
            byte[] queryArr = Encoding.UTF8.GetBytes(query);
            var request = WebRequest.Create("http://login.vk.com/?act=login") as HttpWebRequest;
            request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.3; WOW64; Trident/7.0)";
            request.CookieContainer = Cookie;
            request.AllowAutoRedirect = true;
            request.Method = "POST";
            request.Accept = "text/html, application/xhtml+xml, */*";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = queryArr.Length;
            request.GetRequestStream().Write(queryArr, 0, queryArr.Length);
            var response = request.GetResponse() as HttpWebResponse;
            string html = new StreamReader(response.GetResponseStream()).ReadToEnd();
            Cookie = request.CookieContainer;
            if(html!=null)
            {
                IsConnecting = true;
            }
            System.Threading.Thread.Sleep(2000);
        }
 
        private CookieContainer cookie = new CookieContainer();
        public CookieContainer Cookie
        {
            get
            {
                return cookie;
            }
            set
            {
                cookie = value;
            }
        }
        private bool ConnectingStatus = false;
        public bool IsConnecting
        {
            get
            {
                return ConnectingStatus;
            }
            set
            {
                ConnectingStatus = value;
            }
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5