PowerShell Invoke-WebRequest 得到 403 Forbidden,但随后可以正常工作一段时间

问题描述

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