POST запрос Вконтакте: разместить сообщение на стену - C#
Формулировка задачи:
Здравствуйте, пришел на форум из-за проблемы, хочу написать программу на С#, которая отправляет сообщение на стену ( пока хотя бы так )
Ниже приведу код и скриншоты, пока готова только авторизация, почему-то постинг сообщений не хочет работать.
1.
2.
3. Это вход вконтакте
4.А теперь пост сообщения
1 изображение - так выглядит программа
2 - авторизация проходит успешно ( получаем html со страницы )
3 - вот эта ошибка
Если я ошибся темой, скажите где написать.
Если у вас есть другой способ авторизации (кроме API) расскажите, прошу.
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; }
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; } }
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; }
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; }
Решение задачи: «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; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д