[AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性

目录

背景描述

 用浏览器访问,正常返回

​编辑

 AHK v2官方示例源代码

 AHK v2运行结果报错(0x80092004) 找不到对象或属性

用thqby大佬的WinHttpRequest.ahk库测试报错 0x80092004 找不到对象或属性

附:

用Apifox访问,也正常返回

AHK v1 官方示例源代码

AHK v1运行失败报错 0x80092004 找不到对象或属性

用Msxml2.XMLHTTP则能正常得到结果



背景描述

想通过ahk编程,获取 https://autohotkey.com/download/2.0/version.txt  的文件内容。

在确认用浏览器可以正常访问情况下,用官方帮助中的示例运行会报错 Error: (0x80092004) 找不到对象或属性。用 thqby大佬的 WinHttpRequest.ahk 网络请求库 https://github.com/thqby/ahk2_lib/blob/master/WinHttpRequest.ahk  也报同样错误。

求指点

 用浏览器访问,正常返回

 AHK v2官方示例源代码

whr := ComObject("WinHttp.WinHttpRequest.5.1")
whr.Open("GET", "https://autohotkey.com/download/2.0/version.txt", true)
whr.Send()
whr.WaitForResponse()
version := whr.ResponseText
MsgBox version

 AHK v2运行结果报错(0x80092004) 找不到对象或属性

如果把参数 true改为 false ,报错如下:

用thqby大佬的WinHttpRequest.ahk库测试报错 0x80092004 找不到对象或属性

/************************************************************************* @file: WinHttpRequest.ahk* @description: 网络请求库* @author thqby* @date 2021/08/01* @version 0.0.18***********************************************************************/#Requires AutoHotkey v2.0
whr := WinHttpRequest()
whr.Open("Get", "https://www.autohotkey.com/download/2.0/version.txt", True)
whr.Send()
whr.WaitForResponse()
MsgBox whr.ResponseTextclass WinHttpRequest {static AutoLogonPolicy := {Always: 0,OnlyIfBypassProxy: 1,Never: 2}static Option := {UserAgentString: 0,URL: 1,URLCodePage: 2,EscapePercentInURL: 3,SslErrorIgnoreFlags: 4,SelectCertificate: 5,EnableRedirects: 6,UrlEscapeDisable: 7,UrlEscapeDisableQuery: 8,SecureProtocols: 9,EnableTracing: 10,RevertImpersonationOverSsl: 11,EnableHttpsToHttpRedirects: 12,EnablePassportAuthentication: 13,MaxAutomaticRedirects: 14,MaxResponseHeaderSize: 15,MaxResponseDrainSize: 16,EnableHttp1_1: 17,EnableCertificateRevocationCheck: 18,RejectUserpwd: 19}static PROXYSETTING := {PRECONFIG: 0,DIRECT: 1,PROXY: 2}static SETCREDENTIALSFLAG := {SERVER: 0,PROXY: 1}static SecureProtocol := {SSL2: 0x08,SSL3: 0x20,TLS1: 0x80,TLS1_1: 0x200,TLS1_2: 0x800,All: 0xA8}static SslErrorFlag := {UnknownCA: 0x0100,CertWrongUsage: 0x0200,CertCNInvalid: 0x1000,CertDateInvalid: 0x2000,Ignore_All: 0x3300}__New(UserAgent := unset) {(this.whr := ComObject('WinHttp.WinHttpRequest.5.1')).Option[0] := IsSet(UserAgent) ? UserAgent : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.68'}request(url, method := 'GET', post_data?, headers := {}) {this.Open(method, url)for k, v in headers.OwnProps()this.SetRequestHeader(k, v)this.Send(post_data?)return this.ResponseText}enableRequestEvents(Enable := true) {static vtable := init_vtable()if !Enablereturn this._ievents := this._ref := 0if this._ieventsreturnIConnectionPointContainer := ComObjQuery(pwhr := ComObjValue(this.whr), '{B196B284-BAB4-101A-B69C-00AA00341D07}')DllCall('ole32\CLSIDFromString', 'str', '{F97F4E15-B787-4212-80D1-D380CBBF982E}', 'ptr', IID_IWinHttpRequestEvents := Buffer(16))ComCall(4, IConnectionPointContainer, 'ptr', IID_IWinHttpRequestEvents, 'ptr*', IConnectionPoint := ComValue(0xd, 0))	; IConnectionPointContainer->FindConnectionPointIWinHttpRequestEvents := Buffer(3 * A_PtrSize)NumPut('ptr', vtable.Ptr, 'ptr', ObjPtr(this), 'ptr', ObjPtr(IWinHttpRequestEvents), IWinHttpRequestEvents)ComCall(5, IConnectionPoint, 'ptr', IWinHttpRequestEvents, 'uint*', &dwCookie := 0)	; IConnectionPoint->Advisethis._ievents := { __Delete: (*) => ComCall(6, IConnectionPoint, 'uint', dwCookie) }static init_vtable() {vtable := Buffer(A_PtrSize * 7), offset := vtable.Ptrfor nParam in StrSplit('3113213')offset := NumPut('ptr', CallbackCreate(EventHandler.Bind(A_Index), , Integer(nParam)), offset)vtable.DefineProp('__Delete', { call: __Delete })return vtablestatic EventHandler(index, this, arg1 := 0, arg2 := 0) {if (index < 4) {IEvents := NumGet(this, A_PtrSize * 2, 'ptr')if index == 1NumPut('ptr', this, arg2)if index == 3ObjRelease(IEvents)else ObjAddRef(IEvents)return 0}req := ObjFromPtrAddRef(NumGet(this, A_PtrSize, 'ptr'))req.readyState := index - 2switch index {case 4:	; OnResponseStarttry req.OnResponseStart(arg1, StrGet(arg2, 'utf-16'))case 5:	; OnResponseDataAvailabletry req.OnResponseDataAvailable(NumGet((pSafeArray := NumGet(arg1, 'ptr')) + 8 + A_PtrSize, 'ptr'),NumGet(pSafeArray + 8 + A_PtrSize * 2, 'uint'))case 6:	; OnResponseFinishedtry req._ref := 0, req.OnResponseFinished()case 7:	; OnErrortry req.readyState := req._ref := 0, req.OnError(arg1, StrGet(arg2, 'utf-16'))}}static __Delete(this) {loop 7CallbackFree(NumGet(this, (A_Index - 1) * A_PtrSize, 'ptr'))}}};#region IWinHttpRequest https://learn.microsoft.com/en-us/windows/win32/winhttp/iwinhttprequest-interfaceSetProxy(ProxySetting, ProxyServer, BypassList) => this.whr.SetProxy(ProxySetting, ProxyServer, BypassList)SetCredentials(UserName, Password, Flags) => this.whr.SetCredentials(UserName, Password, Flags)SetRequestHeader(Header, Value) => this.whr.SetRequestHeader(Header, Value)GetResponseHeader(Header) => this.whr.GetResponseHeader(Header)GetAllResponseHeaders() => this.whr.GetAllResponseHeaders()Send(Body?) => (this._ievents && this._ref := this, this.whr.Send(Body?))Open(verb, url, async := false) {this.readyState := 0this.whr.Open(verb, url, async)this.readyState := 1}WaitForResponse(Timeout := -1) => this.whr.WaitForResponse(Timeout)Abort() => (this._ref := this.readyState := 0, this.whr.Abort())SetTimeouts(ResolveTimeout := 0, ConnectTimeout := 60000, SendTimeout := 30000, ReceiveTimeout := 30000) => this.whr.SetTimeouts(ResolveTimeout, ConnectTimeout, SendTimeout, ReceiveTimeout)SetClientCertificate(ClientCertificate) => this.whr.SetClientCertificate(ClientCertificate)SetAutoLogonPolicy(AutoLogonPolicy) => this.whr.SetAutoLogonPolicy(AutoLogonPolicy)Status => this.whr.StatusStatusText => this.whr.StatusTextResponseText => this.whr.ResponseTextResponseBody {get {pSafeArray := ComObjValue(t := this.whr.ResponseBody)pvData := NumGet(pSafeArray + 8 + A_PtrSize, 'ptr')cbElements := NumGet(pSafeArray + 8 + A_PtrSize * 2, 'uint')return ClipboardAll(pvData, cbElements)}}ResponseStream => this.whr.responseStreamOption[Opt] {get => this.whr.Option[Opt]set => (this.whr.Option[Opt] := Value)}Headers {get {m := Map(), m.Default := ''loop parse this.GetAllResponseHeaders(), '`r`n'if (p := InStr(A_LoopField, ':'))m[SubStr(A_LoopField, 1, p - 1)] .= LTrim(SubStr(A_LoopField, p + 1))return m}}/*** The OnError event occurs when there is a run-time error in the application.* @prop {(this,errCode,errDesc)=>void} OnError*/OnError := 0/*** The OnResponseDataAvailable event occurs when data is available from the response.* @prop {(this,safeArray)=>void} OnResponseDataAvailable*/OnResponseDataAvailable := 0/*** The OnResponseStart event occurs when the response data starts to be received.* @prop {(this,status,contentType)=>void} OnResponseDataAvailable*/OnResponseStart := 0/*** The OnResponseFinished event occurs when the response data is complete.* @prop {(this)=>void} OnResponseDataAvailable*/OnResponseFinished := 0;#endregionreadyState := 0, whr := 0, _ievents := 0static __New() {if this != WinHttpRequestreturnthis.DeleteProp('__New')for prop in ['OnError', 'OnResponseDataAvailable', 'OnResponseStart', 'OnResponseFinished']this.Prototype.DefineProp(prop, { set: make_setter(prop) })make_setter(prop) => (this, value := 0) => value && (this.DefineProp(prop, { call: value }), this.enableRequestEvents())}
}

附:

用Apifox访问,也正常返回

AHK v1 官方示例源代码

whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
whr.Open("GET", "https://www.autohotkey.com/download/1.1/version.txt", true)
whr.Send()
whr.WaitForResponse()
version := whr.ResponseText
MsgBox % version

AHK v1运行失败报错 0x80092004 找不到对象或属性

用Msxml2.XMLHTTP则能正常得到结果

#Requires AutoHotkey v2.0
req := ComObject("Msxml2.XMLHTTP")
req.open("GET", "https://www.autohotkey.com/download/2.0/version.txt", true)
req.onreadystatechange := Ready
req.send()PersistentReady() {if (req.readyState != 4)  ; 没有完成.returnif (req.status == 200) ; OK.MsgBox "Latest AutoHotkey version: " req.responseTextelseMsgBox "Status " req.status,, 16ExitApp
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

克洛托光电再度合作福晶科技,高精度光学镜头装调仪正式交付

近日&#xff0c;苏州东方克洛托光电技术有限公司&#xff08;下称“克洛托光电”&#xff09;高精度光学镜头装调仪正式交付于福建福晶科技股份有限公司&#xff0c;研发人员在现场完成设备安装调试并介绍使用方法。据悉&#xff0c;这已是双方第二次展开合作。 前沿产品力助推…

【tomcat】Tomcat如何扩展Java线程池原理

池化技术 在后端中&#xff0c;对于经常使用池化就是来提升系统性能&#xff0c;比如数据库连接池、线程池连接池等&#xff0c;本质都是利用空间换时间的来提升性能&#xff0c;用来避免资源的频繁创建和销毁&#xff0c;以此提高资源的复用率&#xff0c;所以合理设置系统所…

大语言模型诞生过程剖析

过程图如下 &#x1f4da; 第一步&#xff1a;海量文本的无监督学习 得到基座大模型&#x1f389; &#x1f50d; 原料&#xff1a;首先&#xff0c;我们需要海量的文本数据&#xff0c;这些数据可以来自互联网上的各种语料库&#xff0c;包括书籍、新闻、科学论文、社交媒体帖…

简单搭建卷积神经网络实现手写数字10分类

搭建卷积神经网络实现手写数字10分类 1.思路流程 1.导入minest数据集 2.对数据进行预处理 3.构建卷积神经网络模型 4.训练模型&#xff0c;评估模型 5.用模型进行训练预测 一.导入minest数据集 MNIST--->raw--->test-->(0,1,2...) 10个文件夹 MNIST--->raw-…

VRRP虚拟路由冗余技术

VRRP虚拟路由冗余技术&#xff1a;是一种路由容错协议&#xff0c;用于在网络中提供路由器的冗余备份。它通过将多个路由器虚拟成一个虚拟路由器并且多个路由器之间共享一个虚拟IP地址来实现冗余和高可用性。当承担转发业务的主路由器出现故障时&#xff0c;其他备份路由器可以…

安全防御:防火墙概述

目录 一、信息安全 1.1 恶意程序一般会具备一下多个或全部特点 1.2 信息安全五要素&#xff1a; 二、了解防火墙 2.1 防火墙的核心任务 2.2 防火墙的分类 2.3 防火墙的发展历程 2.3.1 包过滤防火墙 2.3.2 应用代理防火墙 2.3.3 状态检测防火墙 补充防御设备 三、防…

骑士人才系统74cms专业版实现本地VUE打包和在线升级方法以及常见问题

骑士人才系统我就不多说了目前来说我接触的人才系统里面除了phpyun就是骑士人才了&#xff0c;两个历史都很悠久&#xff0c;总起来说功能方面各分伯仲&#xff0c;前几期我作过Phpyun的配置教程这次我们针对骑士人才系统说说怎么使用VUE源码本地一键打包后台和在线升级方式&am…

每日Attention学习10——Scale-Aware Modulation

模块出处 [ICCV 23] [link] [code] Scale-Aware Modulation Meet Transformer 模块名称 Scale-Aware Modulation (SAM) 模块作用 改进的自注意力 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional as Fclass SAM(nn.Module):def __init__…

redisTemplate报错为nil,通过redis-cli查看前缀有乱码

public void set(String key, String value, long timeout) {redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);} 改完之后 public void set(String key, String value, long timeout) {redisTemplate.setKeySerializer(new StringRedisSerializer()…

opencascade AIS_InteractiveContext源码学习8 trihedron display attributes

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

最优化(10):牛顿类、拟牛顿类算法

4.4 牛顿类算法——介绍了经典牛顿法及其收敛性&#xff0c;并介绍了修正牛顿法和非精确牛顿法&#xff1b; 4.5 拟牛顿类算法——引入割线方程&#xff0c;介绍拟牛顿算法以及拟牛顿矩阵更新方式&#xff0c;然后给出了拟牛顿法的全局收敛性&#xff0c;最后介绍了有限内存BFG…

Java中创建线程的方式

文章目录 创建线程ThreadRunnableCallable线程池创建方式自定义线程池线程池工作原理阻塞队列线程池参数合理配置线程池参数 创建线程 在Java中创建一个线程&#xff0c;有且仅有一种方式&#xff0c;创建一个Thread类实例&#xff0c;并调用它的start方法。 Thread 最经典也…

在Linux上设置MySQL允许远程连接的完整指南

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

【Linux】多线程_6

文章目录 九、多线程7. 生产者消费者模型生产者消费者模型的简单代码结果演示 未完待续 九、多线程 7. 生产者消费者模型 生产者消费者模型的简单代码 Makefile&#xff1a; cp:Main.ccg -o $ $^ -stdc11 -lpthread .PHONY:clean clean:rm -f cpThread.hpp&#xff1a; #i…

【Linux】Linux必备的基础指令

目录 Linux必备的基础指令一 、 什么是Linux二、 Linux常用命令2.1 ls2.2 pwd2.3 cd2.4 touch2.5 cat2.6 mkdir2.7 rm 三、 Linux重要指令3.1 cp3.2 mv3.3 tail3.4 vim3.5 grep3.6 ps3.7 netstat Linux必备的基础指令 一 、 什么是Linux 系统编程&⽹络编程 Linux⾃⾝提供…

快速掌握块级盒子垂直水平居中的几种方式

大家好&#xff01;今天我们来聊聊Web开发中如何实现块级盒子水平居中。在前端开发中&#xff0c;经常需要将一个块级盒子在父元素中进行垂直和水平居中对齐&#xff0c;本文将介绍几种常见且高效的实现方法。 一、子元素有固定宽高 第一种情况 子元素有固定宽高&#xff08;…

编译x-Wrt 全过程

参考自;​​​​​​c编译教程 | All about X-Wrt 需要详细了解的小伙伴还请参看原文 ^-^ 概念&#xff1a; x-wrt&#xff08;基于openwrt深度定制的发行版本&#xff09; 编译系统: ubuntu22.04 注意&#xff1a; 特别注意的是&#xff0c;整个编译过程&#xff0c;都是用 …

汽车的驱动力,是驱动汽车行驶的力吗?

一、地面对驱动轮的反作用力&#xff1f; 汽车发动机产生的转矩&#xff0c;经传动系传至驱动轮上。此时作用于驱动轮上的转矩Tt产生一个对地面的圆周力F0&#xff0c;地面对驱动轮的反作用力Ft(方向与F0相反)即是驱动汽车的外力&#xff0c;此外力称为汽车的驱动力。 即汽车…

知识图谱研究综述笔记

推荐导读&#xff1a;知识图谱Knowledge Graph Embeddings 论文标题:A Survey on Knowledge Graphs:Representation, Acquisition and Applications发表期刊:IEEE TRANSACTIONS ON NEURAL NETWORKS AND LEARNING SYSTEMS, 2021本文作者&#xff1a;Shaoxiong Ji, Shirui Pan, M…

Swiper轮播图实现

如上图&#xff0c;列表左右滚动轮播&#xff0c;用户鼠标移动到轮播区域&#xff0c;动画停止&#xff0c;鼠标移开轮播继续。 此例子实现技术框架是用的ReactCSS。 主要用的是css的transform和transition来实现左右切换动画效果。 React代码&#xff1a; import React, { us…