- Регистрация
- 07.09.2015
- Сообщения
- 557
- Благодарностей
- 550
- Баллы
- 93
Приветствую всех!
В статье рассмотрим примеры работы с библиотекой Leaf.xNet, являющейся форком xNet.
Из коробки доступны следующие методы:
- GET
- POST
- PATCH
- DELETE
- PUT
- OPTIONS
Подключаем библиотеку:
- Leaf.xNet.dll копируем в папку ExternalAssemblies
- Добавляем в GAC
- Прописываем в Директивы using и общий код:
C#:
using Leaf.xNet; // dll
using HttpStatusCode = Leaf.xNet.HttpStatusCode; // debug request
using System.Net; // cookie
Для работы с запросами можно использовать две конструкции.
///++++++++++++++++++++++++++++++++++++++++++
/// Конструкция работы с запросом #1: using
///++++++++++++++++++++++++++++++++++++++++++
C#:
using (var request = new HttpRequest())
{
request.Get("https://zennolab.com");
}
- Короткая запись если необходимо сделать простой запрос;
- Используя using, нам не нужно закрывать (dispose) запрос;
C#:
HttpRequest request = null;
using (request)
{
var resp = request.Get("http://google.com/file.zip");
resp.ToFile("C:\\myDownloadedFile.zip");
}
///++++++++++++++++++++++++++++++++++++++++++
/// Конструкция работы с запросом #2: try, catch, finally
///++++++++++++++++++++++++++++++++++++++++++
Эта конструкция позволяет использовать более детальный формат сообщений об ошибках, таким образом, можно продумать разные сценарии на каждый тип ошибки.
C#:
HttpRequest request = null;
try
{
}
catch (HttpException ex)
{
project.SendErrorToLog(String.Format("HttpException: {0}", ex.Message)), true);
switch (ex.Status)
{
case HttpExceptionStatus.Other:
project.SendErrorToLog("Unknown error", true);
break;
case HttpExceptionStatus.ProtocolError:
project.SendErrorToLog(String.Format("Status code: {0}", (int)ex.HttpStatusCode)), true);
break;
case HttpExceptionStatus.ConnectFailure:
project.SendErrorToLog("Failed to connect to the HTTP-server.", true);
break;
case HttpExceptionStatus.SendFailure:
project.SendErrorToLog("Failed to send request to HTTP-server.", true);
break;
case HttpExceptionStatus.ReceiveFailure:
project.SendErrorToLog("Failed to load response from HTTP-server.", true);
break;
}
}
finally
{
request.Dispose();
}
///++++++++++++++++++++++++++++++++++++++++++
/// Отладка запроса
///++++++++++++++++++++++++++++++++++++++++++
Помимо отладки ошибок запроса через конструкцию catch, мы можем также отладить ответ в конструкции try.
К примеру, по какой-то причине могут тупить прокси или сервер, к которому идет обращение. В этом случае можно воспользоваться следующей конструкцией внутри try.
C#:
HttpRequest request = null;
request.IgnoreProtocolErrors = true; // В этом случае блок catch не будет выходить по ошибке.
string _request = null;
try
{
// Создадим цикл из пяти запросов.
for (int i = 1; i <= 5; i++)
{
var responce = request.Get("https://zennolab.com");
if (responce.StatusCode == HttpStatusCode.OK)
{
// HTTP status 200 - выходим из цикла, запрос вернул ответ
_request = responce.ToString();
break;
}
else if (responce.StatusCode == HttpStatusCode.NotFound)
{
// HTTP status 404
throw new Exception("Сервер вернул 404 - Страница не найдена");
}
if (responce.StatusCode == HttpStatusCode.InternalServerError)
{
// HTTP status 500
project.SendErrorToLog("Сервер вернул 500 - Сервер приболел, сделаем паузу", true);
Thread.Sleep(2000);
}
else if (Responce.Address.AbsolutePath.Contains("/errors/500.html"))
{
// Можем проверять абсолютный путь конечной ссылки
project.SendErrorToLog("Сервер вернул 500 - Сервер приболел, сделаем паузу", true);
Thread.Sleep(2000);
}
else if (Responce.Address.Host.Contains("zennostore"))
{
// Можем проверять адрес хоста на случай переадресации.
throw new Exception("Сервер перекинул на хост zennostore");
}
}
}
// С Подробной информацией по статус кодам можно ознакомитсья по ссылке:
// https://docs.microsoft.com/en-us/dotnet/api/system.net.httpstatuscode?redirectedfrom=MSDN&view=net-5.0
///++++++++++++++++++++++++++++++++++++++++++
/// Настройки для запроса
///++++++++++++++++++++++++++++++++++++++++++
C#:
HttpRequest request = null;
request.Cookies = new CookieStorage();
request.UserAgent = Http.ChromeUserAgent(); // Создает UserAgent
/// UserAgents were updated in January 2019.
// ChromeUserAgent()
// FirefoxUserAgent()
// IEUserAgent()
// OperaUserAgent()
// OperaMiniUserAgent()
request.IgnoreProtocolErrors = true; // Блок catch не будет выходить по ошибке если 4xx или 5xx.
request.EnableEncodingContent = true;
request.KeepAlive = true;
request.AllowAutoRedirect = true;
request.MaximumAutomaticRedirections = 5;
request.ReconnectLimit = 3;
request.ReconnectDelay = 50;
request[HttpHeader.DNT] = "1";
request[HttpHeader.UpgradeInsecureRequests] = "1";
request["Host"] = String.Format("www.{0}", "zennolab.com");
request[HttpHeader.Accept] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
request[HttpHeader.AcceptLanguage] = "en-US,en;q=0.5";
request.AcceptEncoding = "gzip, deflate, br";
///++++++++++++++++++++++++++++++++++++++++++
/// Работа с GET запросами:
///++++++++++++++++++++++++++++++++++++++++++
C#:
// Если не нужен ответ
request.Get("https://zennolab.com").None();
// Можем сделать запрос без возврата значения
request.Get("https://zennolab.com");
// Либо объявить var и работать с ним.
var httpResponse = request.Get("https://zennolab.com").ToString();
string html = httpResponse.ToString();
string headerToken = httpResponse["cf-request-id"];
// Скачиваем файл.
var resp = request.Get("http://google.com/file.zip");
resp.ToFile("C:\\myDownloadedFile.zip");
///++++++++++++++++++++++++++++++++++++++++++
/// Работа с POST запросами:
///++++++++++++++++++++++++++++++++++++++++++
C#:
// Если ответ не нужен
request.Post("https://zennolab.com").None();
// Запрос без возврата значения в переменную
request.Post("https://zennolab.com");
// Объявляем var и работаем с ним.
var httpResponse = request.Post("https://zennolab.com");
string html = httpResponse.ToString();
//++++++++++++++++++++++++++++++++++++++++++
// Отправка запроса с параметрами
C#:
var httpResponse = request.Post("https://zennolab.com", new StringContent("referrer=&queryString="));
// Либо объявить StringContent предварительно
var stringContent = new StringContent("referrer=&queryString=");
var httpResponse = request.Post("https://zennolab.com", stringContent);
//++++++++++++++++++++++++++++++++++++++++++
// Отправка мультипарт запроса
C#:
var multipartContent = new MultipartContent()
{
{new StringContent("Harry Potter"), "login"},
{new StringContent("Crucio"), "password"},
{new FileContent(@"C:\hp.rar"), "file1", "hp.rar"}
};
var httpResponse = request.Post("https://zennolab.com", multipartContent);
//++++++++++++++++++++++++++++++++++++++++++
// Отправка JSON в запросе
C#:
var stringContent = new StringContent("{\"login\":\"[email protected]\",\"password\":\"admin123\"}");
var httpResponse = request.Post("https://zennolab.com", stringContent, "application/json");
//++++++++++++++++++++++++++++++++++++++++++
// RequestParams
C#:
var urlParams = new RequestParams
{
{ ["id"] = "zY6vR6hU8kG0wE7u" },
{ ["имя"] = "Игорь" },
{ ["jsonContent"] = "{\"login\":\"[email protected]\",\"password\":\"admin123\"}" }
}
var httpResponse = request.Post("https://zennolab.com", urlParams);
// Либо через объявление
var urlParams = new RequestParams();
urlParams["id"] = "zY6vR6hU8kG0wE7u";
urlParams["имя"] = "Игорь";
urlParams["jsonContent"] = "{\"login\":\"[email protected]\",\"password\":\"admin123\"}";
var httpResponse = request.Post("https://zennolab.com", urlParams);
///++++++++++++++++++++++++++++++++++++++++++
/// Работа с Cookie
///++++++++++++++++++++++++++++++++++++++++++
Для работы с куки необходимо объявить CookieStorage.
C#:
HttpRequest request = new HttpRequest();
request.Cookies = new CookieStorage();
C#:
// Получение нужной куки
HttpRequest request = new HttpRequest();
request.Cookies = new CookieStorage();
string xf_session = null;
using (request)
{
request.Get("https://zennolab.com");
var cookies = request.Cookies.GetCookies("https://zennolab.com");
foreach (Cookie cookie in cookies)
{
// Перебор всех кук в лог
project.SendInfoToLog(String.Format("Name: {0} ::: Value: {1}", cookie.Name, cookie.Value), true);
// Получаем в переменную куку xf_session
if (cookie.Name == "xf_session") xf_session = cookie.Value;
}
}
// Добавление новой или обновление существующей куки
// request.Cookies.Set(string name, string value, string domain, string path = "/");
request.Cookies.Set("pll_language", "en", "zennolab.com", "/");
//++++++++++++++++++++++++++++++++++++++++++
// Сохранение и загрузка кук
C#:
//++++++++++++++++++++++++++++++++++++++++++
// Сохранение в файл
HttpRequest request = new HttpRequest();
// Объявляем новый контейнер, который сохраним в файл.
request.Cookies = new CookieStorage();
// Сохранение CookieStorage в файл .jar
request.Cookies.SaveToFile("D:\\cookie.jar", true);
C#:
//++++++++++++++++++++++++++++++++++++++++++
// Загрузка из файла
HttpRequest request = new HttpRequest();
// Объявлять новый CookieStorage не нужно.
request.Cookies = CookieStorage.LoadFromFile("D:\\cookie.jar");
C#:
//++++++++++++++++++++++++++++++++++++++++++
// Сохранение в массив байт
HttpRequest request = new HttpRequest();
request.Cookies = new CookieStorage();
// Сохранение CookieStorage в массив байт - byte[]
var byteArray = request.Cookies.ToBytes();
// Преобразовываем массив байт в строку - string.
string base64 = Convert.ToBase64String(byteArray);
C#:
//++++++++++++++++++++++++++++++++++++++++++
// Загрузка из массива байт
string base64 = "";
HttpRequest request = new HttpRequest();
// Преобразование строки base64 в массив байт
byte[] decByte = Convert.FromBase64String(base64);
// Загрузка CookieStorage массива байт - byte[].
request.Cookies = CookieStorage.FromBytes(decByte);
//++++++++++++++++++++++++++++++++++++++++++
// Работа с Proxy
//++++++++++++++++++++++++++++++++++++++++++
Задавать проекту прокси можно разными способами, выбирайте удобный в вашем случае.
Библиотека поддерживает работу со следующими протоколами:
- HTTP
- Socks4
- Socks4A
- Socks5
C#:
// Вариант 1
request.Proxy = ProxyClient.Parse(ProxyType.HTTP, "ip:port:username:password");
// Вариант 2
request.Proxy = new HttpProxyClient("127.0.0.1", 8888, "username", "password");
request.Proxy = new Socks4ProxyClient("127.0.0.1", 8888, "username", "password");
request.Proxy = new Socks4aProxyClient("127.0.0.1", 8888, "username", "password");
request.Proxy = new Socks5ProxyClient("127.0.0.1", 8888, "username", "password");
// Вариант 3, в случае, когда авторизацию можно задать позже
request.Proxy = HttpProxyClient.Parse("127.0.0.1:8888");
request.Proxy.Username = "username";
request.Proxy.Password = "password";
- Тема статьи
- Нестандартные хаки
- Номер конкурса статей
- Четырнадцатый конкурс статей
Вложения
-
74,3 КБ Просмотры: 530
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: