2015-09-23 4 views
0

В PowerShell Я хочу, чтобы вызвать что-то вроде этого:Как избежать знака равенства для запроса HTTP?

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!

+0

вы попробуйте использовать цитаты вместо двойных кавычек? –

+0

пробовал, не работает – aaron

ответ

1

Я получил решение:

Invoke-WebRequest -Uri "http://localhost:3000/test" -Method POST -Body "`"a%3D`"" 
+0

это также можно сделать как uri] :: EscapeDataString ('a =') – crowchirp

0

Специальные символы в 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=')) 
Смежные вопросы