Ежедневник IT-ка
133 subscribers
22 photos
4 videos
1 file
43 links
Программируем на практике!!
По вопросам по поводу проектов: @vladimir_dzen
Download Telegram
Указано то, на что стоит всегда обращать внимание.
С другими ответами при выполнение Http запросов, можно ознакомится здесь.

#HTTP
​​Необходимо помнить, что повторные Http запросы надо блокировать т.к. это может привести к ошибкам, а именно "могут исчерпаться все доступные TCP соединения"

1. Подключаем пространство имён.

using System.Net.Http;
using System.Threading.Tasks;

static async Task Main(string[] args)
{
  await ReuseQuery();
}

2. Создаём асинхронный метод(что это такое, очень хорошо написано, здесь).

    public static async Task<string> ReuseQuery()
    {
      string result = string.Empty;

2.1. Создаём экземпляра класса.

      using (var client = new HttpClient())
      {

2.2. Обязательно цикл делать внутри конструкции using(для
того, чтобы повторные запросы происходили, через 1 TCP
соединение)

        for (int i = 0; i < 5; i++)
        {
          var request = new HttpRequestMessage(HttpMethod.Get,
            "google.com");

2.3. Делаем запрос.

          using (var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead))
          {

2.4. Читаем полученные данные.

            result = await response.Content.ReadAsStringAsync();
            response.EnsureSuccessStatusCode();
          }
        }
      }
      return result;
    }
  }

#Csharp,#HTTP
​​Часто бывают случаи необходимо работать с Json, который представляет собой элемент с вложенной структурой.

Пример:

{
 "clientKey": "fdfggghhttyydshkahue26",
 "task": {
  "cookies": "",
  "type": "NoCaptchaTaskProxyless",
  "websiteURL": "https://www.somesite/ru/login",
  "websiteKey": "6LcMERGSGSGSHHHS-KcbYQMd-wcLt6ight7u"
  }
}

Рекомендую разбивать подготовительный этап на определённые шаги.

1. Подключение пространство имён.

using Newtonsoft.Json;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.IO;
using System.Text;

2. Создание объектов классов.

  public class CreateTaskRecaptcha
  {
    public string clientKey { get; set; }
    public DataForCreateTaskRecaptcha task { get; set; }
  }
  public class DataForCreateTaskRecaptcha
  {
    public string cookies { get; set; }
    public string type { get; set; }
    public string websiteURL { get; set; }
    public string websiteKey { get; set; }
  }
  public class ResultRecaptcha
  {
    public int errorId { get; set; }
    public string status { get; set; }
    public int taskId { get; set; }
    public string errorDescription { get; set; }
  }

3. Создаём метод, который возвращает экземпляр объект класса с необходимыми заголовками.

    public static HttpClient CreateHttpClient()
    {
      var client = new HttpClient();
      client.Timeout = new TimeSpan(0, 0, 30);
      client.DefaultRequestHeaders.Clear();
      client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36");
      client.DefaultRequestHeaders.Add("Accept", "*/*");
      client.DefaultRequestHeaders.Add("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7");
      client.DefaultRequestHeaders.Add("Connection", "keep-alive");
      return client;
    }

4. Создаём обязательно асинхронный метод, который возвращает метод класса.

    private async Task<int> GetPostThroughHttpRequest(HttpClient client)
    {

4.1. Переменные которые хотим передать.

      string websiteURL = "https://www.google.com/";
      string websiteKey = "6LcMERGSGSGSHHHS-KcbYQMd-wcLt6ight7u";
      string clientKey = "fdfggghhttyydshkahue26";
      string uri = "https://somesite.com/auth/login";

4.2. Передадим значения переменных в наш объект класса.

      var dict = new CreateTaskRecaptcha
      {
        task = new DataForCreateTaskRecaptcha
        {
          cookies = "",
          type = "NoCaptchaTaskProxyless",
          websiteURL = websiteURL,
          websiteKey = websiteKey
        },
        clientKey = clientKey
      };

4.3. Создадим Json из объекта класса.

      string bodyJson = JsonConvert.SerializeObject(dict);

4.4. Установим формат нашего тело запроса.

      var body = new StringContent(bodyJson, Encoding.UTF8, "application/json");

4.5. Делаем запрос.

      var response = await client.PostAsync(uri, body);

4.6. Читаем полученный ответ от сервера.

      string content = await response.Content.ReadAsStringAsync();

4.7. Конвертируем полученный ответ в Json и передаём его в наш объект класса.

      var jsonResult = JsonConvert.DeserializeObject<ResultRecaptcha>(content);
      if (jsonResult.errorId > 0) Console.WriteLine(jsonResult.errorDescription);

4.8. Получаем необходимый метод с нашего объекта класса.

      return jsonResult.taskId;
    }

Пример показывает работу с вложенной структурой Json и Http запросами, которые нам надо передать.

#Csharp,#HTTP