@mdkolpakov

Как исправить ошибку кодировки Powershell, при выводе InvokeRequest?

Отправляю запрос на сайт .
Запрос копировал из Google Network полностью, то есть ошибок в нём нет. Вывод контента страницы появляется в некорректной кодировке.

Вывод выполняется в PowerShell ISE
Обезличенный скрипт - запрос
#[Console]::outputEncoding = [System.Text.Encoding]::GetEncoding('cp866')
#[Console]::outputEncoding = [System.Text.Encoding]::GetEncoding(‘windows-1251’)
#[console]::OutputEncoding = [System.Text.Encoding]::UTF8
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.UserAgent = "Example"
$session.Cookies.Add((New-Object System.Net.Cookie("Example")))

$wget = Invoke-WebRequest -UseBasicParsing -Uri "https://www.abuseipdb.com/check?query=50.31.21.4" `
-WebSession $session `
-Headers @{
"authority"="www.abuseipdb.com"
  "method"="GET"
  "path"="/check?query=50.31.21.4"
  "scheme"="https"
  "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.7"
  "accept-encoding"="gzip, deflate, br, zstd"
  "accept-language"="ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7" 
  "referer"="https://www.abuseipdb.com/"
  "sec-ch-ua"="`"Chromium`";v=`"122`", `"Not(A:Brand`";v=`"24`", `"Google Chrome`";v=`"122`""
  "sec-ch-ua-arch"="`"x86`""
  "sec-ch-ua-bitness"="`"64`""
  "sec-ch-ua-full-version"="`"122.0.6261.129`""
  "sec-ch-ua-full-version-list"="`"Chromium`";v=`"122.0.6261.129`", `"Not(A:Brand`";v=`"24.0.0.0`", `"Google Chrome`";v=`"122.0.6261.129`""
  "sec-ch-ua-mobile"="?0"
  "sec-ch-ua-model"="`"`""
  "sec-ch-ua-platform"="`"Windows`""
  "sec-ch-ua-platform-version"="`"10.0.0`""
  "sec-fetch-dest"="document"
  "sec-fetch-mode"="navigate"
  "sec-fetch-site"="same-origin"
  "sec-fetch-user"="?1"
  "upgrade-insecure-requests"="1"
}

$wget.Content


Вывод выглядит следующим образом:
NQ���bDjR�F����G��9�?���z6� �J7$HJ�K$2��S����'��C0

Пытался изменить кодировку с помощью этих команд по очереди, но ни одна не помогла:
[Console]::outputEncoding = [System.Text.Encoding]::GetEncoding('cp866')
[Console]::outputEncoding = [System.Text.Encoding]::GetEncoding(‘windows-1251’)
[console]::OutputEncoding = [System.Text.Encoding]::UTF8


Также менял accept-language на английский, следующим образом:
"accept-language"="ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7" 
на 
 "accept-language"="en-UK,en;q=0.9,en-US;q=0.8,en;q=0.7"

Но не помогло.
Подскажите пожалуйста, как я могу сменить кодировку на читаемую?
Заранее благодарю за ответ!
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Короче, полез таки я повторить ваш запрос
На заголовки посмотрел до того не очень внимательно

Тут на самом деле проблема не кодировки в смысле клиента (charset), а encoding для протокола - в смысле алгоритма компрессии. По короткому кусочку вывода это было не очень понятно, а выполнили ли вы рекомендацию записать в файл и там посмотреть - не ответили.

Проблема в том, что PSv5.1 не умеет декодировать контент в том виде как вы его просите, а именно
"accept-encoding"="gzip, deflate, br, zstd"
PSv5.1 умеет в gzip, deflate, zstd. а вот в br не умеет

Варианты:
  1. Используйте PSv7, он умеет
  2. Уберите 'br' из заголовка accept-encoding запроса
  3. Уберите вообще заголовок accept-encoding из запроса
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы