Board logo

标题: [问题求助] PowerShell脚本Invoke-WebRequest 一直没有响应 [打印本页]

作者: 5i365    时间: 2022-11-15 11:57     标题: PowerShell脚本Invoke-WebRequest 一直没有响应

使用下面的代码, 在win10系统下 等好长时间一直没有反应
Invoke-WebRequest -Uri https://go.microsoft.com/fwlink/?LinkID=113397


使用下面的代码, 在win10系统下 直接就有反应, 求路过大侠指引, 感谢
Invoke-RestMethod -Uri https://go.microsoft.com/fwlink/?LinkID=113397
--------------------------------------------------------------------------------------------------------------------------------------

上面的代码, 在win7系统下都会报错  ERROR: Invoke-WebRequest : The request was aborted: Could not create SSL/TLS secure channel.
加了[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12  也不行

作者: went    时间: 2022-11-15 19:50

默认会加载DOM树,加上-UseBasicParsing选项
  1. Invoke-WebRequest -UseBasicParsing -Uri https://go.microsoft.com/fwlink/?LinkID=113397
复制代码

作者: 5i365    时间: 2022-11-16 08:29

本帖最后由 5i365 于 2022-11-16 10:55 编辑

回复 2# went

多谢大侠指引, 加上这个参数确实可以响应了, 但是后面代码需要DOM树
这行代码, 实际上是您以前帮忙写的代码中的一行, 请看下面链接的最后一个贴子

http://www.bathome.net/thread-62461-2-1.html

刚开始的时候, 用着很好, 最近想起来用一下, 不灵了, 然后一句一句的试, 找到了是这行代码的问题

能从 -UseBasicParsing  这个参数中解析吗? 因为加了这个参数响应很快
作者: went    时间: 2022-11-16 16:18

  1. $resp = Invoke-WebRequest 'https://go.microsoft.com/fwlink/?LinkID=113397' -UseBasicParsing
  2. $xml = [xml]('<obj>' + ($resp.Content -replace '(?s)^.*?<h2 id="examples">Examples</h2>','' -replace '(?s)<h2 id="parameters">Parameters</h2>.*$','') + '</obj>')
  3. for($i = 0; $i -lt $xml.obj.h3.Count; $i++){
  4.     '------{0}------' -f $xml.obj.h3[$i].innerText
  5.     $xml.obj.pre[$i].InnerText
  6. }
复制代码

作者: 5i365    时间: 2022-11-16 18:19

本帖最后由 5i365 于 2022-11-16 18:21 编辑

回复 4# went


   多谢大侠
真是晕了, 不知道是我电脑问题还是网的问题, 现在无论如何都执行不了, 现在又报下面的错误, 记得上午时还行呢

难道不成微软被墙了?
----------------------------------------------------------------------------------------------------------------------------------

PS C:\Users\Administrator> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

$resp = Invoke-WebRequest 'https://go.microsoft.com/fwlink/?LinkID=113397' -UseBasicParsing

$xml = [xml]('<obj>' + ($resp.Content -replace '(?s)^.*?<h2 id="examples">Examples</h2>', '' -replace '(?s)<h2 id="parameters">arameters</h2>.*$', '') + '</obj>')

for ($i = 0; $i -lt $xml.obj.h3.Count; $i++)
{

'------{0}------' -f $xml.obj.h3[$i].innerText

$xml.obj.pre[$i].InnerText
}
Invoke-WebRequest : The request was aborted: Could not create SSL/TLS secure channel.
At line:3 char:9
+ $resp = Invoke-WebRequest 'https://go.microsoft.com/fwlink/?LinkID=11 ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
作者: 5i365    时间: 2022-11-16 18:48

国外找到一个贴子, 和我一样的无解,
只有win7和 2012有这个问题
https://stackoverflow.com/questi ... ssl-tls-secure-chan
作者: went    时间: 2022-11-16 19:48

最简单办法,升级系统版本,win7兼容性太差
作者: 5i365    时间: 2022-11-16 21:15

本帖最后由 5i365 于 2022-11-16 21:17 编辑

回复 7# went


确实如此, 兼容性越来越差了
但是习惯了win7, 不想重装软件, 配置系统什么的...
现在找了个软件 wget.exe 它可以下载网页, 但是下载的网页还是英文版的, 获取的示例, 里面也没有中文字, 先凑合用了, 哎
作者: 5i365    时间: 2022-11-18 07:49

回复 4# went

刚试了一下, 下面这个网页解析成xml报错,
https://download.ru/files/lOTjyYWp
   


</obj>" to type "System.Xml.XmlDocument". Error: "Unexpected DTD declaration. Line 1, position 8."
  1. $resp = gc .\A.html -raw -Encoding UTF8
  2. $xml = [xml]('<obj>' + ($resp -replace '(?s)^.*?<h2 id="examples">Examples</h2>', '' -replace '(?s)<h2 id="parameters">Parameters</h2>.*$', '') + '</obj>')
  3. for ($i = 0; $i -lt $xml.obj.h3.Count; $i++)
  4. {
  5. '------{0}------' -f $xml.obj.h3[$i].innerText
  6. $xml.obj.pre[$i].InnerText
  7. }
复制代码

作者: went    时间: 2022-11-18 12:02

改正则
examples改为示例 其它的地方一样
也可用 '|' 来匹配多个
作者: went    时间: 2022-11-18 12:04

中文页面和英文页面显示不同
作者: 5i365    时间: 2022-11-18 16:51

本帖最后由 5i365 于 2022-11-18 16:52 编辑

回复 10# went

改成示例, 还是不行
例子里面没有中文, 都是英文和代码, 要是有更稳的办法就好了
帮助示例, 我看差不多就两类, 一类是about关于的, 一类是命令的
作者: went    时间: 2022-11-18 18:21

两类源码不一样,正则也不一样
自己可以尝试修改正则去适配

查看源代码
正则就是去匹配那些h2,h3标签的,然后加载成xml对象
作者: 5i365    时间: 2022-11-18 18:30

本帖最后由 5i365 于 2022-11-18 18:33 编辑

回复 13# went


  多谢大侠指引, 对正则不太懂, 一看就晕
比如下面这几个

(?s)^.*?
作者: went    时间: 2022-11-18 18:53

-replace '(?s)^.*?xxx', ''
单行模式,把字符串开头到xxx这一截替换成空




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2