请求一个网址,在headers中需要增加Date,出现“Invoke-WebRequest : 必须使用适当的属性或方法修改“Date”标头。”
PS C:\Users\TT> $test4 = Invoke-WebRequest "http://www.baidu.com" -Headers @{"Date" = "Wed, 09 Mar 2016 03:32:47 GMT"} -UseBasicParsing
请大神出手相救呀
4 Answers
Best Answer
这是PowerShell 3.0的一个bug:Invoke-WebRequest的底层调用的是.NET中的[System.Net.WebRequest]类。
在这个类中,从参数-header传过来的键值对,有的可以直接塞进属性Headers,
$request.Headers.Add('key','value')
有的却不能这样做否则就会出错:
“The ‘Date’ header must be modified using the appropriate
property or method.
不幸的是正好在开发PowerShell 3.0时,工程师就犯了这个错误。
现在你有两个选择:
- 升级PowerShell 的高版本,比如4.0+
- 直接在PowerShell中调用底层的System.Net.WebRequest.
调用System.Net.WebRequest类似的code如下,具体需要你自己更改。
Function Send-WebRequest { param( [string]$Url, [string]$Data, [switch]$Post ) $request = [System.Net.WebRequest]::Create($Url) $request.ContentType = "application/json" #关键点在这里: $request.Date="Wed, 09 Mar 2016 03:32:47 GMT" if($Post) { $request.Method = "POST" $requestStream = $request.GetRequestStream() $streamWriter = New-Object System.IO.StreamWriter($requestStream) $streamWriter.Write($Data) $streamWriter.Close() $requestStream.Close() } $response = $request.GetResponse() if($response -ne $null) { $streamReader = New-Object System.IO.StreamReader($response.GetResponseStream()) $result = $streamReader.ReadToEnd() $result } }
你的电脑是什么系统啊,我这边没有错误啊,可以直接运行的。
PS> Invoke-WebRequest "http://www.baidu.com" -Headers @{"Date" = "Wed, 09 Mar 2016 03:32
:47 GMT"} -UseBasicParsing
StatusCode : 200
StatusDescription : OK
Content : <!DOCTYPE html><!--STATUS OK--><html><head><meta
http-equiv="content-type" content="text/html;charset=utf-8"><meta
http-equiv="X-UA-Compatible" content="IE=Edge"><meta
content="always" name="referrer"...
RawContent : HTTP/1.1 200 OK
Transfer-Encoding: chunked
Connection: Keep-Alive
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
Date: Wed, 09 Mar 2016 04:24:27 GMT
Set-Cookie: BAIDUID=C476A4997C0...
Forms :
Headers : {[Transfer-Encoding, chunked], [Connection, Keep-Alive], [Vary,
Accept-Encoding], [Content-Type, text/html; charset=utf-8]...}
Images : {@{outerHTML=<img hidefocus="true"
src="//www.baidu.com/img/bd_logo1.png" width="270" height="129">;
tagName=IMG; hidefocus=true; src=//www.baidu.com/img/bd_logo1.png;
width=270; height=129}, @{outerHTML=<img
src="//www.baidu.com/img/baidu_jgylogo3.gif" alt="到百度首页"
title="到百度首页">; tagName=IMG;
src=//www.baidu.com/img/baidu_jgylogo3.gif; alt=到百度首页;
title=到百度首页}}
InputFields : {}
Links : {@{outerHTML=<a href="/" id="result_logo" onmousedown="return
c({'fm':'tab','tab':'logo'})"><img
src="//www.baidu.com/img/baidu_jgylogo3.gif" alt="到百度首页"
title="到百度首页"></a>; tagName=A; href=/; id=result_logo;
onmousedown=return c({'fm':'tab','tab':'logo'})}, @{outerHTML=<a
href="javascript:;" name="ime_hw">手写</a>; tagName=A;
href=javascript:;; name=ime_hw}, @{outerHTML=<a
href="javascript:;" name="ime_py">拼音</a>; tagName=A;
href=javascript:;; name=ime_py}, @{outerHTML=<a
href="javascript:;" name="ime_cl">关闭</a>; tagName=A;
href=javascript:;; name=ime_cl}...}
ParsedHtml :
RawContentLength : 98416
PS>
@Mooser Lee
发现不会在你的回答下评论,只能重开一个回答了
我的系统是Win7的,Powershell是3.0的
今天终于有时间搭建了一个win7+PS3.0的环境。
PowerShell 4.0没有问题,我在Windows Server 2012 R2上面测试通过。