繁体   English   中英

powershell invoke-webrequest 不起作用,但 invoke-restmethod 有效

[英]powershell invoke-webrequest does not work but invoke-restmethod works

我想获取网页的内容以及何时使用

$web = Invoke-RestMethod -Uri "https://inkscape.org/"我会得到内容但是当我使用

$web = Invoke-WebRequest -Uri "https://inkscape.org/"我什么也得不到,为什么会这样?? 到底有什么区别?

简单地说,对于纯文本HTML响应正文,(旧的) Invoke-WebRequest cmdlet 和Invoke-RestMethod cmdlet 之间的关系相对于默认GET方法如下:

# -UseBasicParsing is only needed in *Windows PowerShell*.
(Invoke-WebRequest -UseBasicParsing -Uri "https://inkscape.org/").Content

是相同的:

Invoke-RestMethod -Uri "https://inkscape.org/"

那是:

  • Invoke-WebRequest返回一个响应对象,其.Content属性包含响应的正文始终为文本(除非您使用-OutFile将原始正文保存到文件中)。

    • 对于 HTML 响应正文, Windows PowerShell还尝试使用过时的Internet Explorer将 HTML 文本解析为 HTML DOM,通过.ParsedHTML属性显示。 -UseBasicParsing抑制了这一点。 此开关在PowerShell (Core) 7+中无效,它从根本上不支持解析 HTML,需要第三方解决方案(请参阅此答案以获取示例)或 - 仅在 Windows 上 - 基于 COM 的解决方案(请参阅此答案)。
  • Invoke-RestMethod直接返回响应正文(仅)。

    • 此外,如果目标站点指示正在返回 XML 或 JSON 数据,则Invoke-RestMethod不会将正文返回为text ,而是自动将其解析为[xml]实例 / [System.Xml.XmlElement]实例(用于 RSS / Atom 提要)或[pscustomobject]图( ConvertFrom-Json内置的,可以这么说)。

    • 即使没有已知的响应数据格式,PowerShell 也会尝试解析响应主体,首先是 XML,然后是 JSON; 如果所有尝试都失败,则返回纯文本( [string]实例)。

    • 即使对于text/html响应,也会尝试将它们解析为 XML 也就是说,如果一个页面恰好是有效的 XML(现在很少见),您将获得一个[xml]实例; 例如, https: //httpbin.org/html 上非常简单的 HTML5 页面恰好是有效的 XML(不包括<!DOCTYPE html>声明),而 HTML5 页面通常不是. 因此,
      (Invoke-RestMethod https://httpbin.org/html).GetType().FullName返回System.Xml.XmlDocument ,即一个[xml]实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM