是否可以通过New-WebServiceProxy将其他HTTP标头发送到Web服务


68

我需要与之交互的Web服务(通常是手动进行测试)在某些请求上需要额外的HTTP标头。快速手动测试可以在PowerShell上很好地工作,New-WebServiceProxy但是到目前为止,我还没有找到向请求添加另一个HTTP标头的选项。

有什么用吗?

Answers:


120
Invoke-WebRequest http://yourURLhere -Headers @{"accept"="application/json"}

POSH 3.0中引入


2
我收到一个错误,因为Accept是保留的标头名称。我最终改为使用WebClient。
亚伦

7
这在PowerShell中有效,但仅适用于v4和更高版本。在v3中,它引发异常。
Dan Loughney 2015年

1
问题是关于在使用cmdletNew-WebServiceProxy而不是在添加cmdlet时添加标头的问题Invoke-WebRequest
abillon

在命令行上搜索Invoke-WebRequest标头很久之后,我来到了这里。多个标头可以用分号分隔:Invoke-WebRequest -Uri exampleURL -Headers @ {'x-caller-name'='CallerName'; 'Content-Type'='application / json'; }
Ben Butzer

22

您可以从PowerShell使用.NET的Web客户端。

> $webClient = New-Object System.Net.WebClient
> $webClient.Headers.add('accept','application/json')
> $webClient.DownloadString('http://yourURLhere')

这是一个很大的不仅仅是得到一个代理对象的所有适当的方法和类型变得更复杂。如果我只是手动输入所有内容(包括JSON / XML),那么我就可以使用Fiddler并完成它
Joey

您始终可以将Fiddler请求复制到文本文件,然后从PowerShell中读取该请求,以自动创建标题,无论使用哪种方法。
什么会酷

1
这是PS3及以下版本的答案。
davidhigh

@davidhigh校正:适用于PS3以下。PS3确实包含该-Headers选项。
Ross Presser

10

令我感到惊讶的是:

$uri = 'http://...'

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add('Accept','Application/Json')
$headers.Add('X-My-Header','...')

$result = Invoke-WebRequest -Uri $uri -Headers $headers

为了完整起见,请参考headers属性:

https://msdn.microsoft.com/zh-CN/library/s4ys34ea(v=vs.110).aspx


嗯,这是使用一种完全不同的访问Web服务的方法。当然,这是一个选择,但这不是问题所在。
乔伊

0

在循环中发送授权并执行获取或删除请求的另一种简便方法

$orders=@("522536","522539")

foreach ($order in $orders){
    iwr "https://api.taxjar.com/v2/transactions/orders/$order" `
      -Method 'DELETE'`
      -Headers @{ 'Authorization' ='Token token="34625gdsgd74rghdg4"'}
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.