Авторизация livejournal

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by t_ingvarr, 25 Jan 2012.

  1. t_ingvarr

    t_ingvarr New Member

    Joined:
    24 Jan 2012
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Всем привет. Хочу написать программу клиент для жж. Есть хорошее описание здесь с исходниками. Но при запуске на VS2010 получаю ошибку Удаленный сервер возвратил ошибку (417) Expectation failed. Не могу понять в чем дело. Буду благодарен за любые подсказки.
     
  2. gl0w

    gl0w Member

    Joined:
    31 Dec 2011
    Messages:
    59
    Likes Received:
    21
    Reputations:
    5
    И да поможет тебе Google!

    Код 417 - Expectation Failed
    По каким-то причинам сервер не может удовлетворить значению поля Expect заголовка запроса.

    Что-то не то в твоей авторизации. Код, который выдает ошибку, в студию, пожалуйста. (Я знаю, что взял ты его по ссылке, но не исключено, что ты мог его редактировать)
     
  3. t_ingvarr

    t_ingvarr New Member

    Joined:
    24 Jan 2012
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Плоская flat авторизация
    Code:
    private void login_Click (object sender, EventArgs e)
    	{
    		GetServer ().LoginClear (loginText.Text, passwordText.Text);
    	}
    
    Переходим в GetServer
    Code:
    private LJServer GetServer ()
    	{
    		LJServer currentServer;
    		if (protocol.SelectedIndex == 0)
    		{
    			currentServer = _flatServer;
    		}
    		else
    		{
    			currentServer = _xmlServer;
    		}
    		currentServer.Proxy = GetProxy ();
    		return currentServer;
    	}
    
    На выходе
    ServerUri "http://www.livejournal.com/interface/flat" string
    Proxy null System.Net.WebProxy
    ContentType "application/x-www-form-urlencoded" string

    Переходим в LoginClear
    Code:
    public override void LoginClear (string user, string password)
    	{
    		string request = string.Format ("mode=login&auth_method=clear&user={0}&password={1}",
    				user, password);
    
    		this.SendRequest (request);
    	}
    
    request "mode=login&auth_method=clear&user=t_ingvarr&password=parol" string

    Далее SendRequest
    Code:
    protected string SendRequest (string textRequest)
    	{
    		// Выводим в лог посылаемый запрос
    		_log.WriteLine ("\r\n*** Request:");
    		_log.WriteLine (textRequest);
    		
    		// Преобразуем запрос из строки в byte[]
    		byte[] byteArray = Encoding.UTF8.GetBytes (textRequest);
    		// Поулчаем класс запроса
    		HttpWebRequest request = (HttpWebRequest)WebRequest.Create (ServerUri);
    
    		// Заполняем параметры запроса
    		request.Credentials = CredentialCache.DefaultCredentials;
    		request.Method = "POST";
    		request.ContentLength = textRequest.Length;
    		request.ContentType = this.ContentType;
    
    		// Очищаем коллекцию от старых cookie и добавляем туда новые
    		request.CookieContainer = new CookieContainer ();
    		request.CookieContainer.Add (_cookies);
    
    		// Заполняем параметры Proxy (_proxy == null, если прокси не используется)
    		request.Proxy = _proxy;
    
    		// Если есть cookie с именем "ljsession", то для авторизации с ее помощью
    		// необходимо добавить заголовок с именем "X-LJ-Auth" и значением "cookie"
    		if (_cookies["ljsession"] != null)
    		{
    			request.Headers.Add ("X-LJ-Auth", "cookie");
    		}
    
    		// Отправляем данные запроса
    		Stream requestStream = request.GetRequestStream ();
    		requestStream.Write (byteArray, 0, textRequest.Length);
    
    		// Получаем класс ответа
    		HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
    
    		// Читаем ответ
    		Stream responseStream = response.GetResponseStream ();
    		StreamReader readStream = new StreamReader (responseStream, Encoding.UTF8);
    
    		string currResponse = readStream.ReadToEnd ();
    
    		// Выводим в лог ответ сервера
    		_log.WriteLine ("\r\n*** Response:");
    		_log.WriteLine (currResponse);
    
    		// Выведем в лог полученные в ответе cookie
    		_log.WriteLine ("\r\n*** Cookies:");
    		for (int i = 0; i < response.Cookies.Count; i++)
    		{
    			_log.WriteLine (response.Cookies[i].ToString());
    		}
    
    		readStream.Close ();
    		response.Close ();
    
    		return currResponse;
    	}
    
    Потом ошибка
    [​IMG]