motkot
@motkot
Программирование C#.

Как вообще отправлять эти ваши post запросы?

Я хочу чтобы пользователь в программе писал id и ему открывалось дело.
Речь идет об этом сайте -

Написал что-то страшное, но почему то не работает. в чем проблема?
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
using System.Net.Http;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_MouseClick(object sender, MouseEventArgs e)
        {

            Dictionary<string, string> Params = new Dictionary<string, string>()
            {
                { "CaseNumbers", "" },
                { "Count", "25" },
                { "Courts", "" },
                { "DateFrom", null },
                { "DateTo", null },
                { "Judges", "" },
                { "Page", "1" },
                { "Sides", "" },
                { "WithVKSInstances", "false" },
            };

            string path = @"C:\Users\forgu_000\Desktop\Info.txt";
            File.WriteAllText(path,GetRequest("https://kad.arbitr.ru/", Params));
        }

        private static string GetRequest(string Address, Dictionary<string, string> Params)
        {
            HttpClient client = new HttpClient();
            Uri uri = new Uri(Address);
            var content = new FormUrlEncodedContent(Params);
            return client.PostAsync(Address, content).Result.ToString();
        }
        
    }
}
  • Вопрос задан
  • 378 просмотров
Пригласить эксперта
Ответы на вопрос 3
Result.ToString();

Дай угадаю. Вместо нормального текста у тебя там получается что-то типа "HttpResponseMessage"?) Или вообще всё зависает?
Писать надо как-то так:
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;

var formData = new Dictionary<string, string>
{
    {"CaseNumbers", ""},
    {"Count", "25"},
    {"Courts", ""},
    {"DateFrom", null},
    {"DateTo", null},
    {"Judges", ""},
    {"Page", "1"},
    {"Sides", ""},
    {"WithVKSInstances", "false"},
};
using var client = new HttpClient();
var uri = new Uri("https://kad.arbitr.ru/");
var content = new FormUrlEncodedContent(formData);
var response = await client.PostAsync(uri, content);
var str = await response.Content.ReadAsStringAsync();
System.IO.File.WriteAllText("./result.html", str);

Тк в хендлерах винформ нельзя использовать async Task - придётся button1_MouseClick сделать async void

Вот так выглядит результат:
605c6f8ee4f56880204163.png
Ответ написан
@Voland69
POST запрос нужно отправлять не в корень сайта, а на
https://kad.arbitr.ru/Kad/SearchInstances
если верить DevTools в хроме.
Там же можно посмотреть заголовки, который выставляет сайт (без них может не работать или работать не так, как ожидается).
P.S. странный сайт, имхо. запрос возвращает не json/xml набор данных а готовый HTML - т.е. данные придется парсить. Мне кажется на фронте неправильно запрос сделан - фронт посылает content-type json, а должен посылать accept.
P.P.S. DevTools и Fiddler значительно упрощают разработку подобных вещей.

UPD:
Сайт на заголовок accept реагировать не желает - отправляет все равно html. Чтобы достать данные видимо придется парсить.
Без кук упорно возвращает статус 451. Какие именно критичны, не уточнял - просто скопировал из браузера.
Ответ написан
hottabxp
@hottabxp
Сначала мы жили бедно, а потом нас обокрали..
xNet
Правда она обновлялась 5 лет назад, но в POST запросах ничего не изменилось. В требованиях написано .NET: 4.0, но думаю можно прикрутить и к свежему .Net
[Хабр] xNet — C# библиотека для работы с Web
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы