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;
}
}
}