从Excel电子表格执行HTTP POST需要哪些VBA代码?
就在我终于理解了Msxml2.XMLHTTP和Msxml2.ServerXMLHTTP之间的区别时
http://support.microsoft.com/kb/290761
XMLHTTP专为客户端应用程序而设计,依赖于基于Microsoft Win32 Internet(WinInet)构建的URLMon.ServerXMLHTTP专为服务器应用程序而设计,依赖于新的HTTP客户端堆栈WinHTTP.ServerXMLHTTP提供可靠性和安全性,并且是服务器安全的.有关更多信息,请参阅MSXML软件开发工具包(SDK)文档.
我突然发现WinHttp.WinHttpRequest ......
http://msdn.microsoft.com/en-us/library/aa382925(VS.85).aspx
Microsoft Windows HTTP服务(WinHTTP)为开发人员提供了HTTP/1.1 Internet协议的服务器支持的高级接口.WinHTTP主要用于与HTTP服务器通信的服务器应用程序,主要用于基于服务器的方案.
那么,这与Msxml2.ServerXMLHTTP有何不同?
(好吧,隐含的问题是我应该使用哪一个...)
xmlhttprequest serverxmlhttp winhttp httpwebrequest winhttprequest
我们有以下链接:http://mvp.sos.state.ga.us/
而不是创建一个db来复制MVP页面的信息,我们想用自己的形式,然后在幕后,将信息发送到上面的网站,使用名为MSXML2.ServerXMLHTTP的组件返回结果.
不幸的是,我对这个组件或如何使用它一无所知.
有人会非常友好地请指点我们如何使用我们自己...将信息发送到上面的网站并将结果返回到我们的表单?
我们基本上试图让用户输入第一个姓氏,姓氏,县,出生日期.
谢谢
我们将SSL证书更新为SHA2,但中间证书为SHA1.Chrome和其他浏览器已经确定整个链必须是SHA2.我们的客户在关注地址栏中的黄色警告.有传言称,在几个月内,Chrome和其他浏览器将以停止屏幕取代轻度不引人注目的谨慎.我们当然不希望这样!
...
所以我们重新颁发了证书,新的证书由SHA2中间人签名.当我们使用该证书加密我们服务器上的流量时,我们使用MSXML2.ServerXMLHTTP(在Windows Server 2003上运行)访问该服务器上的远程Web服务的应用程序无法再连接.
在研究之后,我们应用了这两个看起来可能已解决该问题的修补程序:
https://support.microsoft.com/kb/938397/en-us https://support.microsoft.com/kb/968730/en-us
但问题仍然存在.使用SHA1中间件将证书切换回SHA2,我们没有任何问题.
我们已在受信任的商店中安装了中间SHA2证书,但问题仍然存在.
我们已经尝试指定MSXML2.ServerXMLHTTP的所有版本,但都失败了.
ASP代码:
function query(xml)
dim xmlhttp, xmlDoc, url
url = application("component_url")
set xmlhttp = server.createobject("MSXML2.ServerXMLHttp")
call xmlhttp.open ("POST", url, false)
call xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
on error resume next
err.clear
call xmlhttp.send(xml)
if err.number <> 0 then
call sendAlert("An error has occurred while trying to send your request", message)
else
dim rt
rt = ConvertUtf8BytesToString(xmlhttp.responseBody)
set xmlDoc = server.createobject("MSXML2.DomDocument")
xmlDoc.loadXml(rt)
end if
on error goto 0
set query = xmlDoc
set xmlHttp …Run Code Online (Sandbox Code Playgroud) 我们刚刚转移到具有Windows 2008和SQL Server 2008的新专用服务器.我正在尝试使用同一服务器访问ASP页面Server.CreateObject("MSXML2.ServerXMLHTTP").
在我们之前的2003服务器上,这工作正常,但是对于新的2008服务器,操作只是超时.
这是代码:
strURL = "http://www.storeboard.com/profile/profile_view.asp?MemberID=" & MemberID & "&sid=" & cSession.SessionID
Set oXMLHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
oXMLHttp.open "GET", strURL, false
oXMLHttp.send()
IF oXMLHttp.status = 200 THEN
strOut = oXMLHttp.responseText
ELSE
strOut = "Could not get XML data."
END IF
Set oXMLHttp = nothing
Run Code Online (Sandbox Code Playgroud)
代码很简单,但是我收到以下错误:
msxml3.dll error '80072ee2'
The operation timed out
/handle404.asp, line 291
Run Code Online (Sandbox Code Playgroud)
第291行引用oXMLHttp.Send()行.
我可以使用替代代码吗?我在服务器上的其他位置使用脚本访问其他服务器上的文件并且它们正常工作,但是对我们服务器上的文件的任何访问都不起作用.
是否有一种替代方法可以让我在浏览器中保持URL完好无损?此人可以在他们的浏览器中写入URL:http://www.example.com/hello该文件不存在,但我有一个404处理程序,然后将用户指向正确的路径,而不更改浏览器URL,这是必不可少的对于我们的SEO评级.
这是要点:
我打算用asp打电话,我不关心响应.我只想发起呼叫,我不希望页面等待响应.根据文档,它应该看起来像这样:
dim xmlhttp : set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "POST", url, true '' setting the 'asynchronous' option to 'true'
xmlhttp.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8"
xmlhttp.setRequestHeader "Content-Length", Len(XMLData)
xmlhttp.send XMLData
Run Code Online (Sandbox Code Playgroud)
这在同步调用时很有效,但当我将ansynchronous选项翻转为'true'时,什么都不会触发.我可以从互联网上收集到的是用户执行以下操作:
While xmlhttp.readyState <> 4
xmlhttp.waitForResponse 1000
Wend
Run Code Online (Sandbox Code Playgroud)
如果你在等待回应,我是否真的疯了似乎不再是异步电话?
xmlhttp.waitForResponse 1在发送之后将该行放置正确将导致请求触发,但同样,我不想等待一秒钟.
有什么想法吗?
我从政府网站上获取一些XML :
http://www.bankofcanada.ca/stats/assets/rates_rss/noon/en_all.xml
Run Code Online (Sandbox Code Playgroud)
我正在使用以下相当简单的代码:
var
szUrl: string;
http: IXMLHTTPRequest;
begin
szUrl := 'http://www.bankofcanada.ca/stats/assets/rates_rss/noon/en_all.xml';
http := CoXMLHTTP60.Create;
http.open('GET', szUrl, False, '', '');
http.send(EmptyParam);
Assert(http.Status = 200);
Memo1.Lines.Add('HTTP/1.1 '+IntToStr(http.status)+' '+http.statusText);
Memo1.Lines.Add(http.getAllResponseHeaders);
Memo1.Lines.Add(http.responseText);
Run Code Online (Sandbox Code Playgroud)
我不会显示返回的所有正文,但它确实返回有效的xml responseText:
HTTP/1.1 200 OK
Cache-Control: max-age=5
Connection: keep-alive
Connection: Transfer-Encoding
Date: Fri, 30 Mar 2012 14:50:50 GMT
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
Expires: Fri, 30 Mar 2012 14:50:55 GMT
Server: Apache/2.2.16 (Unix) PHP/5.3.3 mod_ssl/2.2.16 OpenSSL/1.0.0d mod_perl/2.0.4 Perl/v5.12.0
X-Powered-By: PHP/5.3.3
<?xml version="1.0" encoding="ISO-8859-1"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:cb="http://www.cbwiki.net/wiki/index.php/Specification_1.1" …Run Code Online (Sandbox Code Playgroud) 有没有人知道如何设置ServerXMLHTTP请求超时时的默认操作?我正在使用setTimeouts()根据MSDN站点设置超时选项.
理想情况下,我想从头开始再次初始化请求,或者如果超时则刷新页面.
我正在使用经典的asp和jscript.
这是我的要求:
function serverXmlHttp(url) {
var serverXmlHttp;
serverXmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0");
// set time out options
serverXmlHttp.setTimeouts(15000,15000,15000,15000);
// does not work
// serverXmlHttp.ontimeout(Response.Write("page has timed out"));
serverXmlHttp.open("GET", url, false);
serverXmlHttp.send();
if (serverXmlHttp.readyState == 4) {
return serverXmlHttp.responseText;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个经典的 ASP 页面,它正在读取外部 rss 提要(xml 文档),然后将其显示在网页上。在我的网站移到新服务器之前,这一切正常。我认为现在是 Windows 2008。我的脚本现在超时了。我不认为问题实际上是因为我增加了超时值而花费的时间太长。有谁知道问题可能是什么以及我如何解决它?
该网站托管在共享服务器上,因此我无法更改任何服务器设置。
我正在使用的代码是
Set objHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP")
' resolve, connect, send, receive - in milliseconds
objhttp.setTimeouts 5000, 60000, 10000, 10000
objHTTP.open "GET",RSSURL,false
objHTTP.send
Run Code Online (Sandbox Code Playgroud)
该代码返回最后一行 (objHTTP.send) 的超时时间。“RSSURL”可以是任何外部 RSS 提要。我正在使用http://www.valewisham.org.uk/rss.xml进行测试。
MSXML2.serverXMLHTTP.6.0我试图使用or同时创建 100-300 个 HTTP 对象/请求WinHttp.WinHttpRequest.5.1。
这些请求是使用测试应用程序在单独的线程上创建的。最多可同时运行 90 个创建对象/请求,一切正常。
当同时创建/调用超过 100 个时,应用程序会崩溃并在 KERNELBASE.dll 中出现异常。
代码:
CreateObject("MSXML2.serverXMLHTTP.6.0")
CreateObject("WinHttp.WinHttpRequest.5.1")
set obj = CreateObject("MSXML2.serverXMLHTTP.6.0")
'set obj = CreateObject("WinHttp.WinHttpRequest.5.1")
obj.open "GET", "https://httpbin.org/get", true
'https://resttesttest.com/
obj.send ' Mostly crashes here.
obj.WaitForResponse
result = obj.responseTEXT
set obj = Nothing
Run Code Online (Sandbox Code Playgroud)
事件查看器报告:
错误模块名称:KERNELBASE.dll,版本:6.1.7601.18015,时间戳:0x50b83c8a 异常代码:0xc00000fd 错误模块路径:C:\Windows\syswow64\KERNELBASE.dll
我尝试将 Async 设置为“true”并设置为“false”。
任何人都可以提供任何指导来调试这个吗?
serverxmlhttp ×10
asp-classic ×6
msxml ×2
vba ×2
xml ×2
asynchronous ×1
delphi ×1
delphi-5 ×1
excel ×1
http ×1
javascript ×1
msxml6 ×1
post ×1
rss ×1
ssl ×1
timeout ×1
vb6 ×1
winhttp ×1