Как я могу использовать PHP, чтобы предварительно заполнить форму или отправить данные на сторонний веб-сайт? - PullRequest
0 голосов
/ 27 марта 2019

Я создаю веб-приложение, которое содержит форму.В настоящее время пользователь вводит данные в эту форму, которая сохраняется в моей базе данных.Затем пользователь открывает сторонний веб-сайт, где он вводит подмножество точно таких же данных в форму на этом веб-сайте.

В идеале, при отправке формы на моем веб-сайте я хотел бы открыть стороннюю.веб-сайт в iframe с его формой, предварительно заполненной данными, уже собранными из моей формы.Очевидная цель - не дать пользователю вводить одни и те же данные дважды, сначала в моей форме, а затем в сторонней форме.Еще одним преимуществом будет отсутствие внимания к моему сайту, поскольку пользователю необходимо будет выполнить дополнительные действия после отправки формы на сторонний сайт.

Я знаю, что существуют способы предварительно заполнить формы на других веб-сайтах.Например, Google Forms позволяет предварительно заполнять формы путем передачи значений в соответствующие атрибуты имен входов в строке запроса.Вот пример, который я создал, чтобы продемонстрировать это (обратите внимание на строку запроса): https://docs.google.com/forms/d/e/1FAIpQLScqua9AJLvRgCuH8o-XfAGeZcbue9ND7a4z2JM5EcAuVqAwag/viewform?vc=0&c=0&w=1&entry.2020941857=Whatever+and+whatever&entry.473490210=foobar

К сожалению, «целевой» веб-сайт не обрабатывает входящие запросы GET аналогичным образом, чтоочевидно, не должно вызывать удивления.Конечно, это не всегда так просто.Я даже не могу манипулировать значениями входных данных в форме целевого веб-сайта, манипулируя DOM с помощью Chrome DevTools (не то чтобы у меня было реальное понимание того, как это могло бы помочь мне, даже если бы я мог).

Более тогоформа даже не отправляется с использованием атрибута действия.Вместо этого вот элементы формы и кнопки, которые я, по общему признанию, не понимаю (опуская некоторые атрибуты для краткости):

<form name="theForm" ng-submit="submitForm(theForm.$valid)" 
no-submit-on-enter="" novalidate=""> 
<button class="btn btn-full ng-binding" type="submit" id="send-form" 
track-event="{category: 'theFormSubmit', action: 'clicked'}" 
skip-click-tracker=""> Submit </button> 
</form>

Я также пытался использовать DevTools для просмотра заголовков, когда я отправляю информацию, используяформа.Заголовки не меняются, когда я нажимаю кнопку.Фактически, когда я нажимаю кнопку, на вкладке «Сеть» вообще не отображается никаких действий.Я не вижу никаких «данных формы» вообще.Но, возможно, я неправильно понимаю, что вижу.

Для чего бы это ни стоило, похоже, что цель сильно зависит от Angular.js, о котором я практически ничего не знаю, поэтому я не уверен, чтоэто даже актуально.Я также знаю, что на моем сайте нельзя манипулировать фреймами с помощью javascript, если он не принадлежит тому же домену, которым он не является.Я кратко изучил phantom.js, но (из того, что я понимаю), похоже, что возникла бы проблема с сохранением сеанса пользователя на целевом сайте.Потребуется перезагрузка, которая уничтожит предварительно заполненные данные, нанося ущерб всей цели.

В любом случае, я задаюсь вопросом, есть ли какой-нибудь способ достичь моей цели с помощью PHP curl или чего-то еще.Напомним, что в случае, если это еще не очевидно: у меня нет доступа к полному исходному коду целевого веб-сайта, и я, скорее всего, не смогу получить к нему доступ.

ОБНОВЛЕНИЕ: Используя вкладку DevTools Network, я снова попытался отправить форму, одним из входов которой было имя Джуд.Я наконец смог изолировать заголовок, который содержал информацию, фильтруя по «Джуду».Информация об отредактированном заголовке и URL запроса приведены ниже: Query String Data in Header Actual Request URL that header belongs to enter image description here

Я чувствую, что наконец-то что-то получаю.Исходя из вышеизложенного, я чувствую, что на самом деле я могу отправить данные формы на сторонний веб-сайт (обходя фактический ввод и отправку формы этого веб-сайта).Поскольку я использовал пользовательский интерфейс, я мог видеть, что форма была успешно отправлена, и у меня были визуальные подсказки о том, как обрабатывается эта информация.Тем не менее, заголовок HTTP 204 (без содержимого), по-видимому, указывает на то, что если я отправлю информацию программно, мне ничего не будет возвращено, чтобы проанализировать успех или неудачу формы, а также то, как обрабатывается информация.В конце концов, в конце концов, это может быть красная сельдь, несмотря на то, что я не уверен, как бы я справился с ее частью browser_session_id.

1 Ответ

0 голосов
/ 27 марта 2019

Если вы используете iframe, вам может не повезти, так как политики межсайтового браузера не позволят вашему JavaScript вмешиваться в DOM в IFRAME.

Если целевой веб-сайт достаточно прост, вы можетеПрокси-сервер по всей форме запроса и ответов, куки и заголовки для вашего сервера (особенно если вы используете PHP), и тогда вы свободны от перекрестных проблем происхождения, так как браузер будет видеть их как один источник

, тогда выможет получить доступ к iframes DOM

  window.frames[0]...

или области видимости anguler, используя

  angular.element("#appname").scope()
...