【问题标题】:MSXML2.XMLHTTP send data to PHP scriptMSXML2.XMLHTTP 将数据发送到 PHP 脚本
【发布时间】:2014-12-10 02:56:53
【问题描述】:

我一直在寻找一个选项,可以将从 Outlook 消息中的附件中读取的数据直接发送到 PHP 脚本,然后该脚本会将日期插入到一个不错的 MySQL 数据库中。 文件的提取和数据的拆分都可以,但是这里有窍门……

从互联网 (here) 我找到了 Jeremy Slade 的一篇不错的帖子,他成功地将一些数据发送到 cgi scipt,一切都很好。

所以,尽管我认为自己很聪明,但我认为我可以将其重写为处理 PHP 脚本。 但随后工作停止了。

我已将代码缩短到sn-p以下;

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 请求,并将任何数据发送到脚本。

够搞笑了,脚本被调用了,但是没有数据传入?

我已经尝试将 [someVariable] 元素的 PHP 脚本设置为 $_GET 和 $_POST,但都没有任何响应? 当我将 PHP 设置为 $_GET 时,我将 VBA MSXML2.XMLHTTP 对象也匹配为“GET”,反之亦然...

我尝试将“数据”变量作为参数传递给“函数”.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”选项不起作用......


非常感谢,

最诚挚的问候

马丁

【问题讨论】:

    标签: php mysql vba outlook


    【解决方案1】:

    这并不完全是一个答案,而更像是一个评论,因为我缺乏足够的声誉来发表评论。

    可以使用Fiddler 分析问题,该Fiddler 提供了请求和响应的详细信息。我在我的系统中使用 MSXML2.XMLHTTP 和 Mirosoft.XMLHTTP 对象检查了与您相同的代码,发现请求没有区别。他们都将包含someVariable=Test 的POST 请求正文传递给了URL 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
    

    以及来自提供的示例 URL 的响应:

    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、Cookie 等)或作为请求正文的一部分(可能是进一步的输入元素)传递更多数据是网络表单的一部分)?

    【讨论】:

      猜你喜欢
      • 2018-02-25
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 2012-01-06
      • 1970-01-01
      • 2012-03-14
      相关资源
      最近更新 更多