Я искал вариант для отправки данных, прочитанных из прикрепленного файла в сообщении Outlook, непосредственно в сценарий PHP, который затем вставит дату в хорошую базу данных MySQL.
Извлечение файла и разделение данных все в порядке, но вот хитрость …
Из Интернета (ВотЯ нашел хороший пост от Джереми Слэйда, которому удалось отправить некоторые данные в 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 WithEnd Sub
Теоретически это должно открыть запрос MSXML2.XMLHTTP по указанному URL-адресу и отправить любые данные с ним в сценарий.
Забавно, скрипт называется, но данные не передаются?
Я попытался установить для PHP-сценария значение $ _GET и $ _POST для элемента [someVariable], но ни на что нет ответа?
Когда я установил PHP на $ _GET, я сопоставил объект VBA MSXML2.XMLHTTP с «GET», и наоборот …
Я попытался передать переменную data в качестве аргумента функции .send, включив ее в скобки
то есть
.send (data)
Но это тоже не работает …
Я немного растерялся, потому что скрипт вызывается, в таблицу добавляется дата, но фактической передачи «отправленных» данных нет.
Я попытался соединить строку данных с URL-адресом, который передается объекту HTTP, по сути передавая URL-адрес «GET» объекту 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» не работает …
Очень признателен,
С наилучшими пожеланиями
Мартейн
Это не совсем ответ, а скорее комментарий, так как мне не хватает репутации, чтобы комментировать.
Проблема может быть проанализирована с помощью обманщик который предоставляет подробную информацию о запросах и ответах. Я проверил тот же код, что и ваш, в моей системе с объектами MSXML2.XMLHTTP и Mirosoft.XMLHTTP и не нашел различий в запросах. Они оба передали тело запроса POST, содержащее someVariable=Test
на 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 -->
Один из вопросов здесь заключается в том, ожидает ли рассматриваемый веб-сервер дальнейших данных посредством заголовков (User-Agent, Referer, Cookies и т. Д.) Или как часть тела запроса (могут быть дополнительные элементы ввода, которые являются частью вебформа)?
Других решений пока нет …