Powershell system.web.HttpUtility / system.UriBuilder Установить кодировку - PullRequest
0 голосов
/ 18 июня 2019

У меня есть сценарий PS, который отправляет запрос REST. для этой ситуации должен быть установлен запрос POST. Проблема в том, что даже если мы заполняем его символами UTF8, такими как «ščřž», с другой стороны, он кодируется (% CA% DE и т. Д.), Даже в методе POST, который не должен его кодировать.

Я обнаружил, что parseQueryString также должен принимать 2-й параметр - кодирование, но, предоставляя второй параметр, он выдает ошибку, которая не может найти перегрузку для функции с 2 параметрами.

Проще говоря - есть ли способ, как изменить этот кусок кода, чтобы заставить любую другую кодировку?

(декодирование на другой стороне, которая не в моих руках, на данный момент не вариант)

  $pars = [system.web.HttpUtility]::parseQueryString([String]::Empty)
    $param_map = $param_maps[$method][$module]
    $param_map.keys | %{


       if ($psBoundParameters.containsKey($_)) {
            $pars[$param_map[$_]] = $psBoundParameters[$_]
          }
        }
        $request = [system.UriBuilder]"http://XXX.XX.XX.XXX:8081/RestService/$http_resource"
        $request.query = $pars.toString()
        $uri = $request.uri

function contact-server {
  try {
    $response = invoke-webrequest -uri $uri -credential $credential -body @{x = 'x'} -method $http_method -useBasicParsing
   ###
  }
  catch{
  ###
  }

}

заранее спасибо

1 Ответ

1 голос
/ 18 июня 2019

Похоже, есть опция кодирования, но это должен быть тип [System.Text.Encoding]. Это не как перечисление, которое можно преобразовать из строки. [system.text.encoding]::utf8 будет работать.

PS C:\> Using assembly System.Web
PS C:\> Using namespace System.Web
PS C:\> [HttpUtility]::parseQueryString

OverloadDefinitions
-------------------
static System.Collections.Specialized.NameValueCollection ParseQueryString(string query)
static System.Collections.Specialized.NameValueCollection ParseQueryString(string query,
System.Text.Encoding encoding)

PS C:\> [HttpUtility]::parseQueryString('hi', [system.text.encoding]::utf8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...