问题描述
PowerShell 5.1 在 Win10 Pro 上,在家中,在 Comcast 上。
我想获取我的外部 IP。
我的第一个请求得到 403 Forbidden。
但是然后我只是重复请求(使用键盘 UpArrow),并且它有效 - 我按预期获得了我的 IP。
但是如果我暂停一段时间(几分钟),我会再次得到 403,然后它就可以工作了
PS> (Invoke-WebRequest -uri "icanhazip.com").Content
Invoke-WebRequest : The Remote Server returned an error: (403) Forbidden.
At line:1 char:2
+ (Invoke-WebRequest -uri "icanhazip.com").Content
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest],WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
PS> (Invoke-WebRequest -uri "icanhazip.com").Content
xx.xx.xx.xx (obscured,but IP as expected)
我可以将 WebRequest 行放入文件并调用它,但第一次失败,第二次有效。
我可以将 WebRequest 行两次放入一个文件中,然后调用它 - 它失败一次然后工作,就像在命令行中一样。 我在 PS 7 上没有遇到过这个问题,这让它看起来像是 PS5 的问题。但是当我使用“https://wtfismyip.com/text”时我也没有遇到这个问题,这让它看起来像是 icanhazip.com 的问题。
解决方法
Invoke-WebRequest 的默认方法是“Get”。指定方法为'Post',不返回错误。
$response = (Invoke-WebRequest -uri "icanhazip.com" -method Post).Content