5个版本

0.2.3 2024年6月27日
0.2.2 2024年3月24日
0.2.1 2024年3月24日
0.2.0 2024年2月14日
0.1.0 2024年2月10日

#3 in #send-http

Download history 2/week @ 2024-06-08 112/week @ 2024-06-22 26/week @ 2024-06-29 31/week @ 2024-07-06 96/week @ 2024-07-27

130 每月下载量

MIT 协议

71KB
1.5K SLoC

Atlas HTTP -

简洁、简单、易于使用的HTTP客户端。功能

  • 异步和同步客户端。
  • 直接下载文件和发送GET< POST、PUT< DELETE< HEAD、OPTIONS请求的函数。
  • 根据PHP的PSR-7标准构建。
  • 支持HTTP和SOCKS5代理
  • 自动管理cookie jar

示例

use atlas_http::{HttpClient, HttpRequest, HttpBody, ProxyType};

// Simple GET request emulating web browser, utilizing cookies.txt as cookie jar
let mut http = HttpClient::builder()
    .browser()
    .cookie_jar("/path/to/cookies.txt")
    .build_sync();

let res = http.get("https://www.google.com/").unwrap();
println!("Status: {}\nBody:\n\n{}", res.status_code(), res.body());


// POST request
let body = HttpBody::from_string("name=John Smith&[email protected]&country=CA");
let res = http.post("https://domain.com/register", &body).unwrap();
println!("Status: {}\nBody:\n\n{}", res.status_code(), res.body());


// Normal PSR-7 style POST, with upload file
let mut body = HttpBody::empty();
body.set_param("name", "John SMith");
body.set_param("email", "[email protected]");
body.upload_file("document", "/path/to/document.pdf");

let headers = vec![
    "Site-User: myuser",
    "Site-API-Key: abc12345"
];

let req = HttpRequest::new("POST", "https://example.com/form", &headers, &body);
let res = http.send(&req).unwrap();
println!("Status: {}\nBody:\n\n{}", res.status_code(), res.body());


// Download file
let res = http.download("https://example.com/path/to/file.tar.gz", "/home/me/file.tar.gz").unwrap();
if res.status_code() == 200 {
    println!("GOt file!");
}


/// Send over SOCKS5 proxy at 192.168.0.24:1080
let mut http = HttpClient::builder()
    .browser()
    .cookie_jar("/path/to/cookies.txt")
    .proxy("192.168.0.24", 1080)
    .proxy_auth("myuser", "mypassword")
    .proxy_type(ProxyType::SOCKS5)
    .build_sync();

let res = http.get("https://some-domain.com/").unwrap();
println!("Status: {}\nBody:\n\n{}", res.status_code(), res.body());


/// Asynchronous example
let mut http = HttpClient::builder().browser().build_async();
let res = http.get("https://www.google.com/").await.unwrap();
println!("Status: {}\nBody:\n\n{}", res.status_code(), res.body());

// Async works exactly the same as syncronous.  The only 
// difference is you call ".build_async()" at the end of 
// the builder instead of ".build_sync()".  That's it.

联系

如果您需要任何帮助或软件开发,请通过电子邮件[email protected]联系我。

即将推出,几乎完成。

依赖

~12–21MB
~387K SLoC