【发布时间】:2015-12-03 06:02:51
【问题描述】:
是否有一种标准方法可以在 PowerShell 中使用 Invoke-WebRequest 或 Invoke-RestMethod 使用查询字符串从网页获取信息?
例如,我知道以下内容与格式良好的 JSON 端点一起使用时会起作用:
$Parameters = @{
Name = 'John'
Children = 'Abe','Karen','Jo'
}
$Result = Invoke-WebRequest -Uri 'http://.....whatever' -Body ( $Parameters | ConvertTo-Json) -ContentType application/json -Method Get
以及等效的 Invoke-WebMethod。其中一个重要方面是内容类型和 ConvertTo-JSON,它管理将 -Body 部分中指定的参数转换为标准形式,包括“Children”字段的数组方面。
对于使用逗号分隔的约定来管理 URL 中的数组参数或诸如“Children[]=Abe&Children[]=Karen&Children=Jo”之类的方法的网站,有什么等效方法可以做到这一点?
是否有我缺少的内容类型,是否有等效的 ConvertTo-?我可以使用吗?我的猜测是以前有人必须这样做。
对于上下文,这是一个经常使用的 在 URL 中编码数组参数的方式,常见于 PHP 网站。
passing arrays as url parameter
编辑 除特定上下文外,删除了对 PHP 的引用,并调整了标题以引用查询字符串。问题在于编码查询字符串而不是 PHP 本身。
【问题讨论】:
-
根据 HTTP/1.1 规范:GET 请求 = 无服务器端正文解析。将 GET 请求与请求正文相结合是没有意义的。
-
我不确定 Invoke-WebRequest 在幕后做了什么,您对命名法无疑是正确的,但在上述用例中,它将使用标准 GET 查询对 URL 进行编码,例如http://...../?Name=John 在上面的例子中 - 虽然它构建数组参数的方式尚不清楚。数组构建是我的问题的症结所在。
-
我明白了。我认为找出答案的最简单方法是破解 NetMon 或 WireShark 并查看通过网络发送的内容
标签: arrays json powershell