#javascript #ajax #vba #xmlhttprequest
#javascript #ajax #vba #xmlhttprequest
Вопрос:
Я пытаюсь перейти с автоматизации IE в VBA на httprequest, я сталкиваюсь с некоторой проблемой при попытке отправить данные формы с помощью действия onclick, подобного function (). Проблема в том, что при onclick () данные формы отправляются на другой URL в том же домене.
пример. Я смотрю на веб-страницу www.test.com/asp.net?186848 когда я отслеживал в Chrome debugger, метод post фактически отправляет данные в www.test.com/component/mxAjaxFunctions.cfc?method=initamp;ajaxcallid=5498_15544XXXXXXX
Краткие сведения
1. форма на веб-сайте, отправляемая с помощью кнопки, является функцией onclick ()
2. форма отправляется на другой URL, идентификатор, отправленный через форму, является тем, который содержался в исходном URL.
3. часть нового URL-адреса содержит случайно сгенерированный идентификатор дату
первоначально я использовал следующий httprequest в vba для получения данных, но это не работает, ответ возвращает то же содержимое.
Затем я зашел в Google Chrome и использовал сетевой регистратор, ниже были события, которые действительно произошли.
- данные формы отправляются на другой URL, чем тот, на который я смотрел. www.test.com/component/mxAjaxFunctions.cfc?method=initamp;ajaxcallid=5498_15544XXXXXXX позже я узнал, прочитав .JS-файл из chrome, в котором 5498 после ajaxcallid является случайным числом, а 15544XXX на самом деле является датой.now() из js
2. Данные формы, отправленные в журнале chrome, следующие:
метод: инициализация
функция: somefunction
идентификатор: 123456
statuscontent: фактическое содержимое, которое я помещаю в текстовое поле
Я попытался изменить запрос post с другим URL, который не работает, и я попытался скопировать и вставить данные формы из Chrome, и это не сработало, я также попытался изменить метод post на init, который также не работает.
objHTTP.Open "POST", originalURL, False
objHTTP.setRequestHeader "Content-type", "application/x-www-form-
urlencoded"
objHTTP.send("form data")
пытался
objHTTP.Open "POST", newURL, False
objHTTP.setRequestHeader "Content-type", "application/x-www-form-
urlencoded"
objHTTP.send("form data")
не сработало
пытался
objHTTP.Open "INIT", newURL, False
objHTTP.setRequestHeader "Content-type", "application/x-www-form-
urlencoded"
objHTTP.send("form data")
не сработало
пытался
objHTTP.Open "INIT", newURL, False
objHTTP.setRequestHeader "Content-type", "application/x-www-form-
urlencoded"
objHTTP.send("form data copy from chrome")
не сработало
пытался
objHTTP.Open "INIT", originalURL, False
objHTTP.setRequestHeader "Content-type", "application/x-www-form-
urlencoded"
objHTTP.send("form data copy from chrome")
не сработало
Комментарии:
1. Что означает «не сработало»? Вы получали одно и то же сообщение об ошибке или неожиданный ответ во всех случаях?
2. Не сработало, значит, я получил тот же текст ответа.
3. Я уже разобрался с этим. итак, ниже было то, что я сделал, чтобы заставить этот httprequest post работать. Итак, я предполагаю, что не сработало, я скопировал URL напрямую с первой попытки, вместо этого, используя скопированный URL, я сгенерировал случайное число миллисекунда, прошедшая с даты unix, точно так же, как то, что js сделал на веб-странице. Я смог опубликовать данные, которые являются той же строкой, которую я скопировал из Google Chrome.
Ответ №1:
Я уже разобрался с этим. итак, ниже было то, что я сделал, чтобы заставить этот httprequest post работать.
Я думаю, что в первый раз не сработало то, что я скопировал URL напрямую, вместо этого, используя скопированный URL, я сгенерировал случайное число миллисекунда, прошедшая с даты unix, точно так же, как то, что js сделал на веб-странице. Я смог опубликовать данные, которые представляют собой ту же строку, которую я скопировал из Google Chrome.
getunixtime = DateDiff("s", "01/01/1970 00:00:00", Now()) amp; Right(Timer *
100, 3)
URL = www.test.com/component/mxAjaxFunctions.cfc?
method=initamp;ajaxcallid="amp; cint(rnd*10001) amp; "_"amp; getunixtime
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "Content-type", "application/x-www-form-
urlencoded"
objHTTP.send("form data copy from chrome")