Задать вопрос

Как скачать файл с помощью Powershell с сайта с авторизацией?

Добрый день, имеется специфический сайт, например mysite.ru, при входе на который всплывает окно авторизации (т.е. не средствами кода сайта, а на уровне веб-сервера похоже, браузер окно авторизации выбрасывает, стандартная похоже basic авторизация)
Проблема в том, что с этого сайта, с определенного пути нужно средствами Powershell скачать файл, который находится по адресу mysite.ru/download/somefile.txt.
Но вроде бы всё просто

Invoke-WebRequest -Uri "http://mysite.ru/download/somefile.txt" -Credential $credentials


Однако если зайти просто по этой ссылке в браузере, то окна обязательной авторизации нет, а веб-сервер просто возвращает 404, если же зайти сначала на mysite.ru, авторизоваться, и после этого по этой ссылке - то файл успешно скачивается

Такое ощущение, что нужно как то в powershell сначала авторизоваться на mysite.ru, а потом уже каким то образом скачать по ссылке mysite.ru/download/somefile.txt (т.е. как будто нужно как то сессию открыть и держать её)

Как можно решить проблему, подскажите пожалуйста
  • Вопрос задан
  • 2142 просмотра
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
@azarij
В меру опытный никто
в хром дев тулз перехватываете все запросы к сайту во время авторизации и скачивания файла. дев тулз даже скопируют для вас запросы в повершеловском формате.
повторяете их в powershell сохраняя сессию, как указал MaxKozlov, через -sessionvariable/-websession.
PROFIT!!!
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@MaxKozlov Куратор тега PowerShell
Сессии, судя по всему
Пару запросов + параметры -SessionVariable/-WebSession
Ответ написан
Комментировать
@strelkov_av Автор вопроса
Ммм правильно ли я понимаю, на примере сайта: sbfactory.ru/cdfiles
1) Я открываю браузер, в девтулзе запись по умолчанию включена
2) В адресную вставляю sbfactory.ru/cdfiles
3) Всплывает окно авторизации где я ввожу (cdcustomer/allowmetodownload)
4) Авторизация проходит успешно
5) Далее кликаю по скачиваемому файлу sbfactory.ru/cdfiles/cd_install.exe

И на выходе имею грубо говоря 3 запроса в девтулзе (4ый с favicon игнорю)
Кликаю по любому в контексте выбираю Copy all Powershell

На выходе получаю:

Invoke-WebRequest -Uri "http://sbfactory.ru/cdfiles" session -Headers @{
"Pragma"="no-cache"
  "Cache-Control"="no-cache"
  "Authorization"="Basic Y2RjdXN0b21lcjphbGxvd21ldG9kb3dubG9hZA=="
  "Upgrade-Insecure-Requests"="1"
  "User-Agent"="Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
  "Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
  "Accept-Encoding"="gzip, deflate"
  "Accept-Language"="ru"
}

Invoke-WebRequest -Uri "http://sbfactory.ru/cdfiles/" -Headers @{
"Pragma"="no-cache"
  "Cache-Control"="no-cache"
  "Authorization"="Basic Y2RjdXN0b21lcjphbGxvd21ldG9kb3dubG9hZA=="
  "Upgrade-Insecure-Requests"="1"
  "User-Agent"="Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
  "Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
  "Accept-Encoding"="gzip, deflate"
  "Accept-Language"="ru"
}

Invoke-WebRequest -Uri "http://sbfactory.ru/cdfiles/cd_install.exe" -Headers @{
"Pragma"="no-cache"
  "Cache-Control"="no-cache"
  "Authorization"="Basic Y2RjdXN0b21lcjphbGxvd21ldG9kb3dubG9hZA=="
  "Upgrade-Insecure-Requests"="1"
  "User-Agent"="Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
  "Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
  "Referer"="http://sbfactory.ru/cdfiles/"
  "Accept-Encoding"="gzip, deflate"
  "Accept-Language"="ru"
}


И где то тут между строк я должен воспользоваться чем то подобным

https://stackoverflow.com/a/51774034/13428313

т.е. типа этого

$Global:loginResponse = Invoke-WebRequest -uri ("https://dealer.md-bmc.rpdss.com/" + $form.Action) -SessionVariable login -Method post -Body $form.Fields

$fileUploadPage = Invoke-WebRequest -Uri $fileUploadurl -WebSession $login
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы