Ошибка при попытке аутентификации на сайте

Я пытаюсь спарсить данные с сайта https://agenda.sime.md/ords/f?p=104:6 . Для этого необходимо авторизоваться. Я пытаюсь сделать это с помощью get и post запросов с помощью библиотеки reqwest и scraper. К сожалению при отправки конечного post запроса в ответ вместо redirect-url и coockie необходимых для доступа к конечной странице с данными я получаю "{\"error\":\"ERR-7620 Could not determine workspace for application ().\",\"addInfo\":\"Contact your application administrator.\",\"pageSubmissionId\":\"148993550275082927598434522305660063648\"}".

Как я понимаю сайт работает на библиотеке orecle-apex
Мой код на rust по отправке запроса:

#[tokio::main]
async fn main() {
    // Отправляю Get запрос дабы получить instance, salt и тд необходимые для post зароса 
    let url = "https://agenda.sime.md/ords/wwv_flow.accept";
    let mut headers = HeaderMap::new();
    headers.insert(USER_AGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0".parse().unwrap());
    let client = Client::new();
    let page_1 = client.get("https://agenda.sime.md/ords/f?p=104:6::::::")
        .headers(headers.clone())
        .send()
        .await
        .unwrap();
    headers.insert(COOKIE, page_1.headers().get(SET_COOKIE).unwrap().clone());
    
    // Парсинг страницы и получение необходимых данных
    let raw_html = page_1.text().await.unwrap();
    let html = Html::parse_document(&raw_html);
    let instance = html.select(&Selector::parse(r#"input[name="p_instance"]"#).unwrap())
        .next()
        .unwrap()
        .value()
        .attr("value")
        .unwrap();
    let page_submission_id = html.select(&Selector::parse(r#"input[name="p_page_submission_id"]"#).unwrap())
        .next()
        .unwrap()
        .value()
        .attr("value")
        .unwrap();
    let salt = html.select(&Selector::parse(r#"input[id="pSalt"]"#).unwrap())
        .next()
        .unwrap()
        .value()
        .attr("value")
        .unwrap();
    let regex = Regex::new(r#"f\?p=.+',\{"#).unwrap();
    let dialog_url = html.select(&Selector::parse(r#"button[id="buttonCopii"]"#).unwrap())
        .next()
        .unwrap()
        .value()
        .attr("onclick")
        .unwrap();
    let capture = regex.find(dialog_url).unwrap().as_str();
    let dialog_url = &capture[0..capture.len()-3].replace("\\u0026", "&");
    
    // Подготовка заголовков необходимых для дальнейших запросов
    //println!("{},{},{},{}",instance, page_submission_id, dialog_url, salt);
    headers.insert(ACCEPT, "application/json, text/javascript, */*; q=0.01".parse().unwrap());
    headers.insert(ACCEPT_ENCODING, "gzip, deflate, br".parse().unwrap());
    headers.insert(ACCEPT_LANGUAGE, "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3".parse().unwrap());
    headers.insert(REFERER, "https://agenda.sime.md/ords/https://agenda.sime.md/ords/f?p=104:6::::::".parse().unwrap());
    headers.insert(CONTENT_LENGTH, "999".parse().unwrap());
    headers.insert(ORIGIN, "https://agenda.sime.md".parse().unwrap());
    headers.insert(CONNECTION, "keep-alive".parse().unwrap());
    
    // Второй Get запросы дабы получить user_type и другой информации необходимой для отправки Post запроса
    let page_2 = client
        .get(format!(r#"https://agenda.sime.md/ords/{}"#, dialog_url))
        .headers(headers.clone())
        .send()
        .await
        .unwrap();
    
    // Парсинг данных
    let raw_html = page_2.text().await.unwrap();
    let html = Html::parse_document(&raw_html);
    let user_type = html.select(&Selector::parse(r#"input[data-for="P101_USER_TYPE"]"#).unwrap())
        .next()
        .unwrap()
        .value()
        .attr("value")
        .unwrap();
    let user_type_name = html.select(&Selector::parse(r#"input[data-for="P101_USER_TYPE_NAME"]"#).unwrap())
        .next()
        .unwrap()
        .value()
        .attr("value")
        .unwrap();
    let protected = html.select(&Selector::parse(r#"input[id=pPageItemsProtected]"#).unwrap())
        .next()
        .unwrap()
        .value()
        .attr("value")
        .unwrap();
    
    //println!("{}\n{}", user_type, user_type_name);
    
    // Подготовка заголовков и тела Post запроса
    *headers.get_mut(REFERER).unwrap() = format!("https://agenda.sime.md/ords/https://agenda.sime.md/ords/{}", dialog_url).parse().unwrap();
    let mut content = HashMap::new();
    content.insert("p_flow_id", "104");
    content.insert("p_flow_step_id", "101");
    content.insert("p_instance",    instance);
    content.insert("p_debug", "");
    content.insert("p_request","LOGIN");
    content.insert("p_reload_on_submit","S");
    content.insert("p_page_submission_id", page_submission_id);
    content.insert("p_json",&format!(r#"p_json=%7B%22pageItems%22%3A%7B%22itemsToSubmit%22%3A%5B%7B%22n%22%3A%22P101_USER_TYPE%22%2C%22v%22%3A%222%22%2C%22ck%22%3A%22{}%22%7D%2C%7B%22n%22%3A%22P101_USER_TYPE_NAME%22%2C%22v%22%3A%22Autentificare+elev%22%2C%22ck%22%3A%22{}%22%7D%2C%7B%22n%22%3A%22P101_USERNAME%22%2C%22v%22%3A%22/login/%22%7D%2C%7B%22n%22%3A%22P101_PASSWORD%22%2C%22v%22%3A%22/*password*/%22%7D%5D%2C%22protected%22%3A%22{}%22%2C%22rowVersion%22%3A%22%22%2C%22formRegionChecksums%22%3A%5B%5D%7D%2C%22salt%22%3A%22{}%22%7D"#, user_type, user_type_name, protected, salt));

    // Отправка Post запроса
    let res = client.get(url)
        .headers(headers)
        .send()
        .await
        .unwrap();
    println!("{:?}", res.text().await.unwrap());
}

В поле p_json пароль был заменён на /password/ а логин на /login/ соответственно

Я пытался найти информацию по соответствующей ошибке но ничего найти не смог, предполагаю что плохо искал


Ответы (0 шт):