Нужно авторизоваться на сайте при помощи аккаунта стим, проблема в том, что после отправки нужных данных редиректит не на сайт , а на главную страницу стим, вот код :
Код:
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;
}
}
}