Я пытаюсь выполнить GET базовой аутентификации, игнорируя проверку сертификата, используя reqwests
.
У меня есть следующий код Python requests
, который работает:
import requests
from requests.auth import HTTPBasicAuth
session = requests.sessions.Session()
session.auth = HTTPBasicAuth("username", "password")
session.verify = False
response = session.get("http://myurl.com/myapi")
Я хочу сделать то же самое, используя Rust reqwest
.
На данный момент у меня есть следующее:
use reqwest
let url = "http://myurl.com/myapi";
let response = reqwest::Client::builder()
.danger_accept_invalid_certs(true)
.build()
.unwrap()
.get(&url)
.basic_auth("username", Some("password"))
.send()
.await?;
Вызов Python requests
работает как положено. Однако я получаю следующий ответ от Rust:
Error: reqwest::Error { kind: Request, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("myurl.com")), port: None, path: "myapi", query: None, fragment: None }, source: Error { kind: Connect, source: Some("unsuccessful tunnel") } }
Если мне нужно создать дополнительный код (я не могу предоставить реальный URL-адрес), дайте мне знать.
Я любезно не согласен. Я знаю, что код Python работает. Возможно, есть что-то, что код Python делает правильно, чего не хватает моему коду Rust. Например, я не уверен, что такое эквивалент Session.verify: bool
в объекте Rust Request
. Или, если уж на то пошло, если это что-то, что reqwest
реализует, или даже то, о чем позаботится Client
.
Вы используете прокси?
@user459872 user459872 - никаких прокси. К сожалению, код Python был удален при редактировании.
@trozzel, пожалуйста, не откатывай это назад. Код Python важен.
Я бы вряд ли посчитал это ответом, но я опубликую это только для того, чтобы обновить свое решение.
Сначала я обновил свою зависимость Cargo.toml
reqwest
до следующей , чтобы удалить зависимости TLS :
reqwest = version = "0.12.4", default-features = false }
reqwest
ошибку TooManyRedirects
.default-features
также отключает возможность управления перенаправлениями, поэтому это не сработало.Затем, после сброса моего Cargo.toml
, чтобы:
reqwest = "0.12.4"
Я обновил вызов GET, удалив строку .danger_accept_invalid_certs(true)
:
let response = reqwest::Client::builder()
.danger_accept_invalid_certs(true)
.build()
.unwrap()
.get(&url)
.basic_auth("username", Some("password"))
.send()
.await?;
Теперь это работает.
Опять же, я не знаю, обязательно ли это проблема/проблема решена, но на всякий случай публикую.
Помимо проверки того, что у вас теоретически есть правильное имя пользователя/пароль и разрешение на доступ к сайту, код Python не имеет отношения к вопросу (он не помогает прояснить задачу, что и так совершенно очевидно) и не делает этого вопрос по Python. Соответствующие детали я удалил.