Заставьте cURL вести себя как форма - PullRequest
1 голос
/ 06 декабря 2009

У меня есть форма на моем сайте, которая отправляет данные на какой-либо удаленный сайт - простая форма HTML. Я хочу использовать данные, которые пользователь вводит в форму для статистических целей. Поэтому вместо того, чтобы отправлять данные на удаленную страницу, я сначала отправляю их в свой скрипт, который отправляет их на удаленный сайт.

Дело в том, что мне нужно, чтобы он вел себя точно так же, как и обычная форма, при переходе пользователя на удаленный сайт и отображении ресурсов.

Когда я использую этот код, он вроде работает, но не так, как я хочу:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $action);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
curl_close($ch);

Проблема в том, что он отображает ответ в том же сценарии. Например, если $ action, например: somesite.com/processform.php и мой скрипт называется mysqcript.php, он будет отображать ответ «somesite.com/processform.php» внутри «mysqcript.php», поэтому все относительные ссылки не работают. Как мне сделать так, чтобы отправить пользователя на «somesite.com/processform.php»? То же самое, что будет делать нажатие кнопки?

Леонтий

Ответы [ 3 ]

1 голос
/ 06 декабря 2009

Вот несколько возможных решений, которые я публикую отдельно, чтобы они не перепутались с тем, что я рекомендую:

1 - продолжайте использовать cURL, проанализируйте ответ и добавьте к нему тег . Это должно работать почти для всего на этой странице.

<base href="http://realsite.com/form_url.php" />

2 - не изменять URL для отправки. Отправьте форму по реальному URL, но захватите ее содержимое с помощью некоторой библиотеки Javascript (это делает YUI) и отправьте ее в свой сценарий через XHR. Это все еще отчасти хакерски.

1 голос
/ 06 декабря 2009

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

http://otherdomain.com/my/request/path.php

и добавьте его перед каждой исходящей ссылкой, которая не начинается с "/" или протокола ("http://"," ftp: // ").

Трудно обнаружить все исходящие ссылки, но я на 100% уверен, что есть готовые классы PHP, которые делают это. Проверьте, например, эту статью и функцию getLinks () в комментариях пользователя. Я не уверен на 100%, действительно ли это то, что вам нужно, но оно, безусловно, идет в правильном направлении.

0 голосов
/ 06 декабря 2009

Есть несколько способов сделать это. Вот один из самых простых: просто используйте редирект 307.

 header('Location: http://realsite.com/form_url.php', true, 307');

Вы можете делать запись и прочее до или после header(), но если вы сделаете это после вызова header(), вам нужно будет запустить скрипт с

ignore_user_abort(true);

Обратите внимание, что браузеры должны уведомлять пользователя о перенаправлении их формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...