Post-запрос Steam на смену ника
привет всем.
С запросами начал работать недавно, поэтому я не понимаю как правильно подать ПОСТ-запрос в Steam. Мне нужно автоматизировать смену ника в стиме.
Вот код:
static async Task Main(string[] args)
{
string uri = "https://steamcommunity.com/id/spaden2k/edit";
HttpClient client = new HttpClient();
var post = new Dictionary<string, string>
{
{ "Content-Disposition: form-data; name=\"personaName\"", "test" },
{ "Content-Disposition: form-data; name=\"type\"", "profileSave" },
};
var content_post = new FormUrlEncodedContent(post);
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0");
client.DefaultRequestHeaders.Add("Accept", "application/json, text/plain, */*");
client.DefaultRequestHeaders.Add("Referer", "https://steamcommunity.com/id/spaden2k/edit/info");
client.DefaultRequestHeaders.Add("Origin", "https://steamcommunity.com");
client.DefaultRequestHeaders.Add("Host", "steamcommunity.com");
client.DefaultRequestHeaders.Add("Connection", "keep-alive");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");
var response = await client.PostAsync(uri, content_post);
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
FormUrlEncodedContent это application/x-www-form-urlencoded а вам надо multipart/form-data, то есть MultipartFormDataContent
static readonly CookieContainer container = new CookieContainer();
static readonly HttpClient client = new HttpClient(new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.All,
CookieContainer = container
});
static async Task Main(string[] args)
{
string url = "https://ссылка";
Dictionary<string, string> formData = new Dictionary<string, string>()
{
["personaName"] = "test",
["type"] = "profileSave"
};
// пример добавления кук
//var cookie = new Cookie("myCookie", "my-cookie-value", "/", "mydomain.com");
//container.Add(cookie);
using var request = new HttpRequestMessage(HttpMethod.Post, url);
var content = CreateMultipartFormContent(formData);
request.Content = content;
//Console.WriteLine(request.ToString());
//Console.WriteLine(await content.ReadAsStringAsync());
using var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
Console.WriteLine($"{(int)response.StatusCode} {response.ReasonPhrase}");
Console.WriteLine(await response.Content.ReadAsStringAsync());
Console.ReadKey();
}
static HttpContent CreateMultipartFormContent(Dictionary<string, string> formData)
{
var result = new MultipartFormDataContent();
foreach (var pair in formData)
{
var content = new StringContent(pair.Value);
content.Headers.ContentType = null;
result.Add(content, pair.Key);
}
return result;
}
Отладочный вывод (закомментровал отправку, раскомментировал вывод)
Method: POST, RequestUri: 'https://ссылка/', Version: 1.1, Content: System.Net.Http.MultipartFormDataContent, Headers:
{
Content-Type: multipart/form-data; boundary="86e6797b-a7bb-477e-85d5-488227c8e2e1"
}
--86e6797b-a7bb-477e-85d5-488227c8e2e1
Content-Disposition: form-data; name=personaName
test
--86e6797b-a7bb-477e-85d5-488227c8e2e1
Content-Disposition: form-data; name=type
profileSave
--86e6797b-a7bb-477e-85d5-488227c8e2e1--
Заголовки Connection и Accept-Encoding добавлять не нужно, HttpClient их сам добавит при необходимости. Например задание AutomaticDecompression как раз и добавляет Accept-Encoding и включает поддержку разархивации ответов от сервера.





