我一直在寻找一个选项,将从Outlook消息中附加文件读取的数据直接发送到PHP脚本,然后将该日期插入到一个漂亮的MySQL数据库中。 文件的提取和数据的分割都可以,但这是诀窍......
来自互联网(here)我找到了一个很好的帖子,杰里米斯莱德已经设法将一些数据发送到cgi scipt,一切都很好。
所以,我以为我是聪明的,我以为我可以重写它来处理PHP脚本。 但随后工程停止了。
我已将代码缩短到以下代码段;
Sub TestURL()
Set xhr = CreateObject("MSXML2.XMLHTTP")
URL = "http://somedomain.com/php/test.php"
data = "someVariable=Test"
With xhr
.Open "POST", URL, False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.Send data
End With
End Sub
理论上,这应该在给定的URL处打开一个MSXML2.XMLHTTP请求,并将其中的任何数据发送到脚本。
有趣的是,脚本被调用,但没有传递数据?
我已经尝试将PHP脚本设置为[someVariable]元素的$ _GET和$ _POST,但是它们都没有响应吗? 当我将PHP设置为$ _GET时,我将VBA MSXML2.XMLHTTP对象与“GET”匹配,反之亦然......
我已经尝试将'data'变量作为参数传递给'function'.send,方法是将它包含在括号中 即。
.send (data)
但这也不起作用......
我有点不知所措,因为脚本被调用,数据库被添加到表中但是没有实际传输'发送'数据?
我尝试将数据字符串连接到传递给HTTP对象的URL,实际上是将“GET”URL传递给HTTP对象。 即。
URL = URL & "?" & data
但无济于事......: - (
如果我直接从浏览器传递数据,那么php脚本本身就能正常工作 即。
http://somedomain.com/php/test.php?someVariable=Test
正确添加数据并读取变量...
一些更开明的灵可以引导我朝着正确的方向前进吗?
20141016 **********更新**********
好的,在深入挖掘内容时,我发现还有一个选项可以将XmlHttp对象称为“Microsoft.XmlHttp”?
有趣的是,在设置这样的对象时, 即。
Set xhr = CreateObject("Microsoft.XMLHTTP")
代码有效,数据被添加到表中,.responsText是成功消息。
然而,如果我回到原始代码,我会收到一条PHP错误消息,告诉我PHP语法中有错误?这意味着发送的实际“数据”在使用“MSXML2.XMLHTTP”和使用“Microsoft.XMLHTTP”之间有所不同???
试图从互联网上挖掘出两者之间的差异,但却找不到能让我对这个主题有充分理解的帖子吗?
尽管我的代码现在有效,但我仍然有一个困难的问题就是不理解两者之间的区别,并且会感谢某人做出的回复:-)因为我现在有一个有效的代码,但不是了解它的工作原理... :-) 或者mroeover不理解为什么“MSXML2”选项不起作用......
非常感谢,
最诚挚的问候
马亭
答案 0 :(得分:0)
这不是一个答案,但更像是评论,因为我缺乏足够的评论声誉。
可以使用Fiddler分析问题,{{3}}提供请求和响应的详细信息。我使用MSXML2.XMLHTTP和Mirosoft.XMLHTTP对象在我的系统中检查了与您相同的代码,发现请求没有区别。他们都将包含someVariable=Test
的POST请求正文传递给了网址http://somedomain.com/php/test.php
。
以下是两种情况下的原始POST请求:
POST http://somedomain.com/php/test.php HTTP/1.1
Accept: */*
Accept-Language: en-us
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8)
Host: somedomain.com
Content-Length: 17
Proxy-Connection: Keep-Alive
Pragma: no-cache
someVariable=Test
提供示例网址的响应:
HTTP/1.1 405 Method Not Allowed
Server: nginx/1.7.6
Date: Thu, 08 Jan 2015 15:23:58 GMT
Content-Type: text/html
via: HTTP/1.1 proxy226
Connection: close
<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx/1.7.6</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
这里的一个问题是,所讨论的Web服务器是否期望通过标题(User-Agent,Referer,Cookies等)或作为请求正文的一部分传递更多数据(可能是进一步的输入元素,是网络形式的一部分)?