winhttp_async - асинхронный HTTP-клиент с поддержкой HTTPS, прокси, отправка/парсинг заголовков, поддержка редиректов, поддержка no_std (нет зависимости от стандартной библиотеки, только core+alloc), простое builder-api для создания клиентов и запросов. HTTPS может работать криво на Windows 7 без обновлений.
Пример использования:
Перед использованием запускаем тесты:
Или билдим тесты в один бинарник и прогоняем на других машинах:
Некоторые тесты могут падать на Win7 без обновлений.
Пароль от архива:
Пример использования:
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