Необходимо помнить, что повторные Http запросы надо блокировать т.к. это может привести к ошибкам, а именно "могут исчерпаться все доступные TCP соединения"
1. Подключаем пространство имён.
2. Создаём асинхронный метод(что это такое, очень хорошо написано, здесь).
2.1. Создаём экземпляра класса.
2.2. Обязательно цикл делать внутри конструкции using(для
того, чтобы повторные запросы происходили, через 1 TCP
соединение)
2.3. Делаем запрос.
2.4. Читаем полученные данные.
#Csharp,#HTTP
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, который представляет собой элемент с вложенной структурой.
Пример:
Рекомендую разбивать подготовительный этап на определённые шаги.
1. Подключение пространство имён.
2. Создание объектов классов.
3. Создаём метод, который возвращает экземпляр объект класса с необходимыми заголовками.
4. Создаём обязательно асинхронный метод, который возвращает метод класса.
4.1. Переменные которые хотим передать.
4.2. Передадим значения переменных в наш объект класса.
4.3. Создадим Json из объекта класса.
4.4. Установим формат нашего тело запроса.
4.5. Делаем запрос.
4.6. Читаем полученный ответ от сервера.
4.7. Конвертируем полученный ответ в Json и передаём его в наш объект класса.
4.8. Получаем необходимый метод с нашего объекта класса.
Пример показывает работу с вложенной структурой Json и Http запросами, которые нам надо передать.
#Csharp,#HTTP
Пример:
{
"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