我有一个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)