Invoke-WebRequest 对于不存在的 URL 返回 200

问题描述 投票:0回答:1

我正在尝试在 PowerShell 中提出一种(简单且快速)的方法来确定 URL 表示的资源(例如文件)是否存在。 我读过关于此的不同帖子,但是: 当我使用

Invoke-WebRequest "https://downloads.sourceforge.net/blah" -DisableKeepAlive -UseBasicParsing -Method head

我回来了

StatusCode        : 200
StatusDescription : OK
Content           :
RawContent        : HTTP/1.1 200 OK

当我使用 CURL 时,我得到 404:

curl "https://downloads.sourceforge.net/blah"
<html>
 <head>
  <title>404 Not Found</title>
 </head>
 <body>
  <h1>404 Not Found</h1>
  The resource could not be found.<br /><br />
 </body>
</html>

当资源确实存在时,Invoke-WebRequest 再次返回 200,CURL 再次返回 302(找到)。

CURL 与 Invoke-WebRequest 有何不同?我尝试使用 GET、POST 调用 Invoke-WebRequest - 没有变化。

powershell curl
1个回答
0
投票

curl
(Windows 上为
curl.exe
)与 PowerShell 的 Web cmdlet、
Invoke-WebRequest
Invoke-RestMethod
,使用不同的用户代理字符串,许多网站会根据该字符串修改其行为,这解释不同的行为:

  • 不幸的是,PowerShell 的 Web cmdlet 使用的用户代理字符串类似于成熟的交互式浏览器;例如,在 Windows 上使用 7.5 版本的 PowerShell (Core) 7:

    • Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.22621; en-US) PowerShell/7.5.0
  • 相比之下,

    curl
    使用类似:

    • curl/8.6.0

但是,PowerShell 的 Web cmdlet(如

curl.exe
,带有
-A
/
--user-agent
)允许您通过 -UserAgent 指定
自定义
用户代理字符串。

因此,你可以让你的行为像

curl
那样:

Invoke-WebRequest -UserAgent curl/8.6.0 https://downloads.sourceforge.net/blah

注:

  • -UserAgent curl
    至少手头的 URL 似乎就足够了,尽管我不知道这是否适用于所有网站。
© www.soinside.com 2019 - 2024. All rights reserved.