Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2016, 12:39   #1
Lolidze
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 48
По умолчанию Авторизация на "чужом" сайте через стим

Нужно авторизоваться на сайте при помощи аккаунта стим, проблема в том, что после отправки нужных данных редиректит не на сайт , а на главную страницу стим, вот код :
Код:
 public void Post() {
 
 
                        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://steamcommunity.com/openid/login");
           
            webRequest.Referer = "https://steamcommunity.com/openid/login?openid.ns=http://specs.openid.net/auth/2.0&openid.mode=checkid_setup&openid.return_to=https://www.csgozone.net/openid%3Fhash%3Dcheck&openid.realm=https://www.csgozone.net&openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&openid.identity=http://specs.openid.net/auth/2.0/identifier_select";
            webRequest.Headers["Accept-Encoding"] = "gzip, deflate, br";
            webRequest.Headers["Accept-Language"] = "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4";
            webRequest.Headers["Accept-Charset"] = "iso-8859-1,*,utf-8";
            webRequest.Headers["Upgrade-Insecure-Requests"] = "1";
            webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";
            webRequest.CookieContainer = this.cookiesContainer;
           // webRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
 
            using (MultiPartForm multiPart = new MultiPartForm(webRequest))
            {
                //    multiPart.AddData("method", "post");
                multiPart.AddData("action", "steam_openid_login");
                multiPart.AddData("openid.mode", "checkid_setup");
                multiPart.AddData("openidparams", richTextBox2.Text); // эт получаю с другого гет запроса, парсит со страницы, там все норм
                multiPart.AddData("nonce", this.sessionID);
 
            }
 
            HttpWebResponse webResponse = null;
            webResponse = (HttpWebResponse)webRequest.GetResponse();
        }
Код класса MultiPartForm :
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Security.Cryptography;
 
namespace WebTools
{
    class MultiPartForm : IDisposable
    {
        private Stream _stream;        
        private string _boundary;
        private string _templateData = "--{0}\r\nContent-Disposition: form-data; name="{1}"\r\n\r\n{2}\r\n";
        private string _templateFile = "--{0}\r\nContent-Disposition: form-data; name="{1}"; filename="{2}"\r\nContent-Type: {3}\r\n\r\n";
        private string _templateEnd = "--{0}--\r\n\r\n";
 
        public MultiPartForm(WebRequest Request)
        {
            _boundary = String.Format("--{0}", GetMD5());
            Request.Method = "POST"; //multipart/form-data; boundary=----WebKitFormBoundaryXJOBZB5tPBFDMbL9 - так выглядит content type, который отсылает стим
            Request.ContentType = String.Format("multipart/form-data; boundary=----WebKitFormBoundary{0}", _boundary);
            
            _stream = Request.GetRequestStream();
        }
 
        public void AddData(string Name, string Value)
        {
            byte[] contentData = Encoding.UTF8.GetBytes(String.Format(_templateData, _boundary, Name, Value));
            _stream.Write(contentData, 0, contentData.Length);
        }
 
        public void AddFile(string Name, string FilePath)
        {
            AddFile(Name, FilePath, "application/octet-stream");
        }
 
        public void AddFile(string Name, string FilePath, string FileType)
        {
            using (FileStream fileStream = new FileStream(FilePath, FileMode.Open))
            {
                AddFile(Name, FilePath, fileStream, FileType);
            }
        }
 
        public void AddFile(string Name, string FilePath, Stream FileStream)
        {
            AddFile(Name, FilePath, FileStream, "application/octet-stream");
        }
 
        public void AddFile(string Name, string FilePath, Stream FileStream, string FileType)
        {
            FileStream.Seek(0, SeekOrigin.Begin);
            byte[] contentFile = Encoding.UTF8.GetBytes(String.Format(_templateFile, _boundary, Name, FilePath, FileType));
            _stream.Write(contentFile, 0, contentFile.Length);
            FileStream.CopyTo(_stream);
            byte[] _lineFeed = Encoding.UTF8.GetBytes("\r\n");
            _stream.Write(_lineFeed, 0, _lineFeed.Length);
        }
 
        public void Dispose()
        {
            Close();
            GC.SuppressFinalize(this);
        }
 
        public void Close()
        {
            byte[] contentEnd = Encoding.UTF8.GetBytes(String.Format(_templateEnd, _boundary));
            _stream.Write(contentEnd, 0, contentEnd.Length);
        }
 
        private string GetMD5()
        {
            Random randNum = new Random();
            MD5CryptoServiceProvider md5hash = new MD5CryptoServiceProvider();
            byte[] randByte = Encoding.UTF8.GetBytes(randNum.NextDouble().ToString());
            byte[] computeHash = md5hash.ComputeHash(randByte);
            string resultHash = String.Empty;
            foreach (byte currentByte in computeHash)
            {
                resultHash += currentByte.ToString("x2");
            }
            return resultHash;
        }
    }
}
Lolidze вне форума Ответить с цитированием
Старый 06.06.2016, 14:46   #2
Lolidze
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 48
По умолчанию

никто не знает ?
Lolidze вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц