Powershell system.web.HttpUtility/system.UriBuilder Set enco



我有一个PS脚本,它发送一个REST请求。 对于这种情况,应设置 POST 请求。问题是,即使我们用 UTF8 字符(如"ščřž"(填充它,另一方面,它也是编码的(%CA%DE 等(,即使在 POST 方法中也不应该对其进行编码。

我发现,parseQueryString也应该采用第二个参数 - 编码,但提供第二个参数,它会抛出一个错误,找不到具有 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{
  ###
  }

}

提前致谢

看起来有一个编码选项,但它必须是类型 [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)

相关内容

最新更新