• XSS.stack #1 – первый литературный журнал от юзеров форума

[rust] WinHTTP Async client

reqwest

(L3) cache
Пользователь
Регистрация
05.05.2022
Сообщения
231
Реакции
137
Гарант сделки
2
Депозит
0.00
winhttp_async - асинхронный HTTP-клиент с поддержкой HTTPS, прокси, отправка/парсинг заголовков, поддержка редиректов, поддержка no_std (нет зависимости от стандартной библиотеки, только core+alloc), простое builder-api для создания клиентов и запросов. HTTPS может работать криво на Windows 7 без обновлений.
Пример использования:
YAML:
// Cargo.toml
[dependencies]
tokio = { version = "1.34.0", features = ["full"] }
winhttp_async = { path = "/some/path/winhttp_async" }
C-подобный:
// main.rs
use winhttp_async::{encode_utf16, ClientBuilder, Proxy, RequestBuilder};

#[tokio::main]
async fn main() {
    let host = encode_utf16("httpbin.org");
    let user_agent = encode_utf16("example user agent");
    let method = encode_utf16("GET");
    let path = encode_utf16("/get");
    let header_name = encode_utf16("Content-Type");
    let header_value = encode_utf16("application/json");

    // configure and build new http client with necessary options
    let client = ClientBuilder::new()
        .host(&host)
        .port(443)
        .user_agent(&user_agent)
        .proxy(Proxy::Automatic) // use Proxy::Default on systems witch Windows 8.1 and earlier
        .connect_retries(3)
        .timeout(60000)
        .build()
        .expect("build client failed");

    // configure new request
    let b = RequestBuilder::new()
        .secure(true)
        .method(&method)
        .path(&path);
    // send request and await for a response
    let resp = client.send(b).await.expect("send request failed");

    // check status code
    assert_eq!(resp.status_code(), Some(200));

    // get response 'Content-Type' header
    // -1 because v is null terminated
    assert_eq!(
        resp.header(&header_name),
        Some(&header_value[..header_value.len() - 1])
    );
}
Перед использованием запускаем тесты:
cargo test
Или билдим тесты в один бинарник и прогоняем на других машинах:
cargo test --no-run
Некоторые тесты могут падать на Win7 без обновлений.
Пароль от архива:
Скрытый контент для зарегистрированных пользователей.
xss.pro
 

Вложения

  • winhttp_async.zip
    70.1 КБ · Просмотры: 15
Актуальный линк: winhttp_async_0.1.1.zip
what are the differences between reqwest and this lib
Крейт reqwest имеет свою реализацию http, https (system-native/rustls), более гибкий, кроссплатформенный и тяжеловесный.
Крейт winhttp_async - тонкая обертка над системной библиотекой WinHttp.dll, поддержка no_std.
This lib supports http2?
Поддержки http2 нет в самом крейте, т.к лично мне он был не нужен, но сама библиотека winhttp поддерживает http2, так что могу добавить.
 
Актуальный линк: winhttp_async_0.1.1.zip

Крейт reqwest имеет свою реализацию http, https (system-native/rustls), более гибкий, кроссплатформенный и тяжеловесный.
Крейт winhttp_async - тонкая обертка над системной библиотекой WinHttp.dll, поддержка no_std.

Поддержки http2 нет в самом крейте, т.к лично мне он был не нужен, но сама библиотека winhttp поддерживает http2, так что могу добавить.
thanks for the answer, i am thinking about doing a checker in rust and i thought about use reqwest, that was the reason of my question. I use a linux vps to rent my checkers, so i will still planning to use reqwest
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх