如何转义 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='))