PDA

Просмотр полной версии : [Помогите!] Авторизация и использование cookie в контакте на C#.


maksy
11.07.2011, 21:01
Итак,хочу написать программу для добавления сообщения на стену на C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;

namespace VK_Auth
{
public partial class Form1 : Form
{
string sid;
Cookie cook;
public Form1()
{
InitializeComponent();
f2 = new Form2();
label1.Text = "Email:";
label1.Font = new Font(label1.Font.FontFamily, 12, FontStyle.Bold);
label2.Text = "Password:";
label2.Font = new Font(label2.Font.FontFamily,12, FontStyle.Bold);
button1.Text = "Login";
}
Form2 f2;
private void button1_Click(object sender, EventArgs e)
{
//создаем запрос
[Ссылки могут видеть только зарегистрированные и активированные пользователи] wrGETURL = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])System.Net.WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]" + textBox1.Text + "&pass=" + textBox2.Text);
//выставляем значения Headers
//Запрещаем редирект
wrGETURL.AllowAutoRedirect = false;
//Выставляем таймаут
wrGETURL.Timeout = 100000;
//получаем Headers,пришедшие в ответе
string headers = wrGETURL.GetResponse().Headers.ToString();
//получаем весь ответ
[Ссылки могут видеть только зарегистрированные и активированные пользователи] my[Ссылки могут видеть только зарегистрированные и активированные пользователи] = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])wrGETURL.GetResponse();
//записываем ответ в поток
StreamReader myStreamReadermy = new StreamReader(my[Ссылки могут видеть только зарегистрированные и активированные пользователи]() , Encoding.GetEncoding(1251));
//запихиваем ответ в строку
string page = myStreamReadermy.ReadToEnd();
//это регулярное выражение,которое выдирает из переменной headers(а ее мы получили выше) значение sid
Regex sidregex = new Regex("sid=([a-z0-9]+); exp");
Match ssid = sidregex.Match(headers);
sid = ssid.Groups[1].Value;
//инициализируем куки
cook = new Cookie("remixsid", sid);
//тоже самое,куки пишем
cook.Domain = "vkontakte.ru";
//проверяем,получили ли мы нужную переменную в куки
if (String.IsNullOrEmpty(sid))
MessageBox.Show("Чето не получается авторизироваться");
else
f2.Show();
}
}
}

Форма 1 идет авторизация через вк,как я понял куки тут уже получены,мне надо их как то сохранить для использования в форме 2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;

namespace VK_Auth
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
// Формируем строку с параметрами
String secondStepForm = "act=post&al=1&facebook_export=&friends_only=&hash=5ecab99058d0d689fe&message=Пример&note_title=&official=&status_export=&to_id=ЗАСЕКРЕЧЕН))&type=own";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
// Настраиваем параметры запроса
request.UserAgent = "Opera/9.80";
request.Method = "POST";
// Указываем тип отправляемых данных
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
// Преобразуем данные к соответствующую кодировку
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
// Записываем данные в поток
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
}
}
}
Форма,тут отправляется post запрос на добавление сообщения,но он не работает так как надо впихать cookie в код. Вот в чем вопрос как из формы 1 сохранить cookie и впихать в форму 2 при отправки сообщения?
P.S если можно сразу исправленый код))
P.SS все коды взял с жука)

Cherinho
13.07.2011, 01:27
передавай в конструктор Form2 параметр cookie и все

maksy
17.07.2011, 19:39
передавай в конструктор Form2 параметр cookie и все

Как именно?

Cherinho
18.07.2011, 03:24
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;

namespace VK_Auth
{
public partial class Form1 : Form
{
string sid;
Cookie cook;
public Form1()
{
InitializeComponent();
label1.Text = "Email:";
label1.Font = new Font(label1.Font.FontFamily, 12, FontStyle.Bold);
label2.Text = "Password:";
label2.Font = new Font(label2.Font.FontFamily,12, FontStyle.Bold);
button1.Text = "Login";
}

private void button1_Click(object sender, EventArgs e)
{
//создаем запрос
[Ссылки могут видеть только зарегистрированные и активированные пользователи] wrGETURL = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])System.Net.WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]" + textBox1.Text + "&pass=" + textBox2.Text);
//выставляем значения Headers
//Запрещаем редирект
wrGETURL.AllowAutoRedirect = false;
//Выставляем таймаут
wrGETURL.Timeout = 100000;
//получаем Headers,пришедшие в ответе
string headers = wrGETURL.GetResponse().Headers.ToString();
//получаем весь ответ
[Ссылки могут видеть только зарегистрированные и активированные пользователи] my[Ссылки могут видеть только зарегистрированные и активированные пользователи] = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])wrGETURL.GetResponse();
//записываем ответ в поток
StreamReader myStreamReadermy = new StreamReader(my[Ссылки могут видеть только зарегистрированные и активированные пользователи]() , Encoding.GetEncoding(1251));
//запихиваем ответ в строку
string page = myStreamReadermy.ReadToEnd();
//это регулярное выражение,которое выдирает из переменной headers(а ее мы получили выше) значение sid
Regex sidregex = new Regex("sid=([a-z0-9]+); exp");
Match ssid = sidregex.Match(headers);
sid = ssid.Groups[1].Value;
//инициализируем куки
cook = new Cookie("remixsid", sid);
//тоже самое,куки пишем
cook.Domain = "vkontakte.ru";
//проверяем,получили ли мы нужную переменную в куки
if (String.IsNullOrEmpty(sid))
MessageBox.Show("Чето не получается авторизироваться");
else
{
Form2 f2=new Form2(cook);
f2.Show();
}
}
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;

namespace VK_Auth
{
public partial class Form2 : Form
{
Cookie cook;
public Form2(Cookie c)
{
InitializeComponent();
cook=c;
}

private void button1_Click(object sender, EventArgs e)
{
// Формируем строку с параметрами
String secondStepForm = "act=post&al=1&facebook_export=&friends_only=&hash=5ecab99058d0d689fe&message=Пример&note_title=&official=&status_export=&to_id=ЗАСЕКРЕЧЕН))&type=own";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
// Настраиваем параметры запроса
request.UserAgent = "Opera/9.80";
request.Method = "POST";
// Указываем тип отправляемых данных
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
// Преобразуем данные к соответствующую кодировку
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
// Записываем данные в поток
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
}
}
}
все,дальше в form2 работай с теми куки,которые получил в form1

maksy
19.07.2011, 20:08
все,дальше в form2 работай с теми куки,которые получил в form1
Ну а как!? Я новенький в c# и с куками дела не имел,мне просто код кинь(желательно мой дополненый) и я сам разберусь.

Cherinho
20.07.2011, 01:24
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;

namespace VK_Auth
{
public partial class Form1 : Form
{
string sid;
Cookie cook;
public Form1()
{
InitializeComponent();
label1.Text = "Email:";
label1.Font = new Font(label1.Font.FontFamily, 12, FontStyle.Bold);
label2.Text = "Password:";
label2.Font = new Font(label2.Font.FontFamily,12, FontStyle.Bold);
button1.Text = "Login";
}

private void button1_Click(object sender, EventArgs e)
{
//создаем запрос
[Ссылки могут видеть только зарегистрированные и активированные пользователи] wrGETURL = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])System.Net.WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]" + textBox1.Text + "&pass=" + textBox2.Text);
//выставляем значения Headers
//Запрещаем редирект
wrGETURL.AllowAutoRedirect = false;
//Выставляем таймаут
wrGETURL.Timeout = 100000;
//получаем Headers,пришедшие в ответе
string headers = wrGETURL.GetResponse().Headers.ToString();
//получаем весь ответ
[Ссылки могут видеть только зарегистрированные и активированные пользователи] my[Ссылки могут видеть только зарегистрированные и активированные пользователи] = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])wrGETURL.GetResponse();
//записываем ответ в поток
StreamReader myStreamReadermy = new StreamReader(my[Ссылки могут видеть только зарегистрированные и активированные пользователи]() , Encoding.GetEncoding(1251));
//запихиваем ответ в строку
string page = myStreamReadermy.ReadToEnd();
//это регулярное выражение,которое выдирает из переменной headers(а ее мы получили выше) значение sid
Regex sidregex = new Regex("sid=([a-z0-9]+); exp");
Match ssid = sidregex.Match(headers);
sid = ssid.Groups[1].Value;
//инициализируем куки
cook = new Cookie("remixsid", sid);
//тоже самое,куки пишем
cook.Domain = "vkontakte.ru";
//проверяем,получили ли мы нужную переменную в куки
if (String.IsNullOrEmpty(sid))
MessageBox.Show("Чето не получается авторизироваться");
else
{
Form2 f2=new Form2(cook);
f2.Show();
}
}
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;

namespace VK_Auth
{
public partial class Form2 : Form
{
CookieContainer cc=new CookieContainer();
Cookie cook;
public Form2(Cookie c)
{
InitializeComponent();
cook=c;
}

private void button1_Click(object sender, EventArgs e)
{
cc.Add(cook);
// Формируем строку с параметрами
String secondStepForm = "act=post&al=1&facebook_export=&friends_only=&hash=5ecab99058d0d689fe&message=Пример&note_title=&official=&status_export=&to_id=ЗАСЕКРЕЧЕН))&type=own";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.CookieContainer=cc;
// Настраиваем параметры запроса
request.UserAgent = "Opera/9.80";
request.Method = "POST";
// Указываем тип отправляемых данных
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
// Преобразуем данные к соответствующую кодировку
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
// Записываем данные в поток
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
}
}
}
вот

maksy
21.07.2011, 16:58
Спасибо,попробую.