标题: [问题求助] 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选项- 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
- $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">Parameters</h2>.*$','') + '</obj>')
-
- for($i = 0; $i -lt $xml.obj.h3.Count; $i++){
- '------{0}------' -f $xml.obj.h3[$i].innerText
- $xml.obj.pre[$i].InnerText
- }
复制代码
作者: 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."
- $resp = gc .\A.html -raw -Encoding UTF8
- $xml = [xml]('<obj>' + ($resp -replace '(?s)^.*?<h2 id="examples">Examples</h2>', '' -replace '(?s)<h2 id="parameters">Parameters</h2>.*$', '') + '</obj>')
-
- for ($i = 0; $i -lt $xml.obj.h3.Count; $i++)
- {
- '------{0}------' -f $xml.obj.h3[$i].innerText
- $xml.obj.pre[$i].InnerText
- }
复制代码
作者: 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://www.bathome.net/) |
Powered by Discuz! 7.2 |