如何转义 HTTP 请求的等号?
How to escape equal sign for HTTP request?
在 PowerShell 中,我想这样调用:
Invoke-WebRequest -Uri "http://localhost:3000/test" -Method POST -Body "a="
注意正文包含一个等号(=),但在服务器端(我使用node.js+express.js),如果我调用request.body
,它会出现成为{a:""}
,而我想要的是{"a=":""}
。
如果我这样调用:
Invoke-WebRequest -Uri "http://localhost:3000/test" -Method POST -Body "`"a=`""
request.body
是 "a: """
,即损坏的 JSON 字符串!
我得到了解决方案:
Invoke-WebRequest -Uri "http://localhost:3000/test" -Method POST -Body "`"a%3D`""
HTTP 请求中的特殊字符应为 percent-encoded。您可以使用带有回调的正则表达式替换来执行此操作:
function ConvertTo-PercentEncoded([string]$str) {
$re = [regex]'[^a-z0-9_-]'
$cb = { '%{0:x2}' -f [int][char]$args[0].Value }
$re.Replace($str, $cb)
}
$url = 'http://localhost:3000/test'
Invoke-WebRequest -Uri $url -Method POST -Body (ConvertTo-PercentEncoded "a=")
或使用UrlEncode()
方法:
Add-Type -Assembly System.Web
$url = 'http://localhost:3000/test'
Invoke-WebRequest -Uri $url -Method POST -Body ([Web.HttpUtility]::UrlEncode('a='))
在 PowerShell 中,我想这样调用:
Invoke-WebRequest -Uri "http://localhost:3000/test" -Method POST -Body "a="
注意正文包含一个等号(=),但在服务器端(我使用node.js+express.js),如果我调用request.body
,它会出现成为{a:""}
,而我想要的是{"a=":""}
。
如果我这样调用:
Invoke-WebRequest -Uri "http://localhost:3000/test" -Method POST -Body "`"a=`""
request.body
是 "a: """
,即损坏的 JSON 字符串!
我得到了解决方案:
Invoke-WebRequest -Uri "http://localhost:3000/test" -Method POST -Body "`"a%3D`""
HTTP 请求中的特殊字符应为 percent-encoded。您可以使用带有回调的正则表达式替换来执行此操作:
function ConvertTo-PercentEncoded([string]$str) {
$re = [regex]'[^a-z0-9_-]'
$cb = { '%{0:x2}' -f [int][char]$args[0].Value }
$re.Replace($str, $cb)
}
$url = 'http://localhost:3000/test'
Invoke-WebRequest -Uri $url -Method POST -Body (ConvertTo-PercentEncoded "a=")
或使用UrlEncode()
方法:
Add-Type -Assembly System.Web
$url = 'http://localhost:3000/test'
Invoke-WebRequest -Uri $url -Method POST -Body ([Web.HttpUtility]::UrlEncode('a='))