就在我终于理解了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
我可以访问API.API将XML帖子作为输入,然后返回带有相关数据的XML响应.
我想要
我在excel中没有编程背景,但对不同的Web脚本语言,HTML,CSS,Javascript等感到满意.
有任何想法吗?
这里提出的问题是:如何使用VBA从Excel向服务器发送HTTP POST请求?几乎正是我正在寻找的,除了我试图将大量文件发送到服务器.我进一步搜索,发现如何使用VBA通过HTTP帖子上传zip文件?这也很好,但非常令人沮丧 - 这似乎是很多工作(不仅仅是在这里制作HTML表单......).
这里的选项#2:http://www.motobit.com/tips/detpg_post-binary-data-url/(正如上面提到的关于SO的问题中所引用的)似乎它会运作良好,但是当我在JS工作时CSS,我不知道如何在示例中创建FormData(发送到服务器的二进制文件).
谁能帮帮我吗?本质上,我想通过VBA从HTTP内部通过HTTP_POST将3-6个文件从Excel内部发送到期望表单数据的Web服务器上的PHP脚本.处理此问题的HTML表单如下所示:
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
谢谢大家.
编辑 - 2012年8月2日
我还在努力解决这个问题.我不知道VBA/6,几乎只是基本的JS所以我有点失落.这是我到目前为止所做的:
Sub HTTPInternetPutFile()
' create new object with WinHttpRequest for this operation
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim FormFields As String
' initialize variables that we will set and pass as parameters
Dim sfpath
Dim strURL …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用vba WinHttp.WinHttpRequest向kigo的api发出请求,我能够发送请求,但WinHttpRequest在发送请求时更改添加Charset = UTF-8的内容类型,其中kigo的api返回415错误.
我像这样设置内容类型
web_Http.SetRequestHeader "Content-Type", "application/json"
Run Code Online (Sandbox Code Playgroud)
但当我在Wireshark中查看请求时,内容类型就是这样的
Content-Type: application/json; Charset=UTF-8
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我找到了这个,这与我的问题类似,但我不明白解决方案.
我有一个 Inno Setup 安装程序,需要在安装过程中进行 API 调用。这会将一些数据发布到远程 API。
POST 调用在 [Code] 部分使用 Pascal 和WinHttpRequest对象执行。API 是 ASP.Net WebAPI 2 (C#)。
我可以完全控制流程的所有部分,即 Inno Setup 脚本、代码部分和 WebAPI。
我可以在没有任何问题的情况下同步进行 POST 调用,但是如果我true在WinHttpRequest.Open()方法上设置 async 标志,则该.Send()方法似乎根本不会执行。
procedure PostData(postural: String);
var
WinHttpReq: Variant;
ReqContent: String;
begin
try
WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
ReqContent := 'item=value';
WinHttpReq.Open('POST', postUrl, true);
WinHttpReq.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
WinHttpReq.Send(ReqContent);
except
end;
end;
Run Code Online (Sandbox Code Playgroud)
我在 VisualStudio 调试器中检查了一个断点,并且永远不会调用端点。
在此处和 Google 上搜索时,我只发现了各种异步获取响应的尝试,但我找不到针对此问题的解决方案。我不需要响应,这是一种即发即忘的 API 调用。
为什么 API 没有收到调用,我该如何解决这个问题?
谢谢。
我正在使用 AHK 脚本发送一些 POST 请求。我正在尝试获得超时响应,以便向用户弹出一些消息。我不知道如何使用“SetTimeouts”方法和“WaitForResponse”见下面的代码
WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.SetTimeouts(3000,3000,3000,3000)
openConnection(WebRequest,ip){
WebRequest.Open("POST", "http://" ip "/cgi/drsLogin",true)
WebRequest.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
WebRequest.Send("action=login&username=admin&password=admin")
time := WebRequest.WaitForResponse(2)
if (time = -1) {
addTextToGui("Connection Timeout")
}
else{
return
}
return
}
Run Code Online (Sandbox Code Playgroud) 是否有可以替换或像WinHttp.WinHttpRequest一样工作的内置.NET类?
谢谢!
我很难过,为什么这不起作用似乎无法找到任何问题.
这是代码.
Public Const MULTIPART_BOUNDARY = "speed"
Function getBalance() As String
Dim sEntityBody As String
Dim postBody() As Byte
Dim username As String
Dim password As String
username = CStr(frmMain.txtUser.text)
password = CStr(frmMain.txtPass.text)
sEntityBody = "--" & MULTIPART_BOUNDARY & vbCrLf
sEntityBody = sEntityBody & "Content-Disposition: form-data; name=""function""" & vbCrLf & vbCrLf & "balance" & vbCrLf
sEntityBody = sEntityBody & "--" & MULTIPART_BOUNDARY & vbCrLf
sEntityBody = sEntityBody & "Content-Disposition: form-data; name=""username""" & vbCrLf & vbCrLf & username & vbCrLf
sEntityBody …Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi和WinHTTP来执行HTTP请求以从Internet下载一些文件,我可以执行请求但我不知道如何从返回的OleVariant获取IStream ResponseStream.我花了很多时间谷歌搜索,但我无法弄清楚如何做到这一点.这是我尝试过的:
var
req: IWinHTTPRequest;
instream: IStream;
begin
req := CoWinHTTPRequest.Create;
req.Open('GET', 'http://google.com', false);
req.Send('');
if req.Status <> 200 then
begin
ShowMessage('failure'#10 + req.StatusText);
FreeAndNil(req);
Application.Terminate;
end;
instream := req.ResponseStream as IStream;
ShowMessage('success');
FreeAndNil(instream);
FreeAndNil(req);
end;
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误[DCC Error] main.pas(45): E2015 Operator not applicable to this operand type(第45行instream := req.ResponseStream as IStream;).
如何从OleVariant中吓跑IStream?
我正在使用 WinHttpRequest.5.1 对象在 excel 365 (16.0.11328.20562) vba 脚本上发出一些 https 请求。
我知道服务器的证书会因为CN错误而发生错误。因此,我使用忽略 ssl 错误的选项来抑制此错误。
我发誓以下代码在两周前有效,现在它抛出此错误:
运行时错误 -2147012727 (80072f89) 证书无效
这是代码(包括:Microsoft WinHTTP 服务,版本 5.1 [winhttpcom.dll]):
Sub test()
Dim url As String
url = "https://someserver:5096/api/v1/$metadata"
Dim winHttpReq As WinHttpRequest
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
'Ignoriere SSL-Errors
winHttpReq.Option(4) = 13056
'I also tested
'winHttpReq.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = SslErrorFlag_Ignore_All
'winHttpReq.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = SslErrorFlag_CertCNInvalid
winHttpReq.Open "GET", url, False
winHttpReq.Send ("")
Debug.Print winHttpReq.ResponseText
End Sub
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我会收到证书无效错误,尽管 ssl-errors 应该被忽略。
我希望您知道为什么会发生这种情况,并提前感谢您的回答。
winhttprequest ×10
vba ×4
winhttp ×4
excel ×3
excel-vba ×2
http ×2
post ×2
.net ×1
autohotkey ×1
delphi ×1
delphi-2010 ×1
http-post ×1
inno-setup ×1
istream ×1
ms-access ×1
ole ×1
pascal ×1
ssl ×1
vb6 ×1