Мне нужно сделать запрос POST в удаленном домене trhough Ajax, я знаю, что существует ограничение политики одинакового происхождения, но я прочитал, что может быть возможным сделать мост в PHP на моем сервере для перенаправления запроса.
Дело в том, что я не знаю, как написать этот мост, и я не могу найти информацию о Google.
Думаю, мне нужно использовать CURL.
Может кто-нибудь объяснить мне, как написать?
Если вам нужен прокси-сервер или « мост », вы можете попробовать следующее: вы можете получить простой вызов AJAX для этого PHP-скрипта и перенаправить этот POST на другой желаемый сервер.
Как это работает:
Не забудьте сначала поместить некоторые методы проверки подлинности сервера , поскольку я не написал ни одного в этом примере, или эта страница будет хорошей спам-машиной
EDIT: что я имел в виду, это использовать ваш сервер для отправки запроса сбоя на целевой сервер. в любом случае это не так уж плохо для добавления простой аутентификации для ваших пользователей 🙂
<?php /* You might want some authentication here */ /* check authentication */ /* Authentication ended. */ $url = 'http://target.com/api'; //Edit your target here foreach($_GET as $getname => $getvar) { $fields[$getname] = urlencode($getvar); //for proxying get request to POST. } foreach($_POST as $postname => $postvar) { $fields[$postname ] = urlencode($postvar); //for proxying POST requests. } //url-ify the data for the POST foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } rtrim($fields_string, '&'); //open connection $ch = curl_init(); //set the url, number of POST vars, POST data curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_POST, count($fields)); curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); //execute post $result = curl_exec($ch); //close connection curl_close($ch);
Я предполагаю, что вы знаете способ отправки запроса POST ajax. Если каким-то образом вы этого не сделаете, просто попробуйте прочитать http://www.openjs.com/scripts/jx/jx.php
В зависимости от вашего PHP-конфигурации и сложности запроса вы можете просто уйти с помощью функции file_get_contents . Например:
<?php if (!isset($_GET["id"])) { die("No ID passed"); } $theID = (int)$_GET["id"]; echo file_get_contents("http://example.com/getSomeData?id={$theID}");
Если вы поместите это в файл PHP в своем домене, вы можете использовать AJAX для запроса этого файла, не ограничиваясь одними и теми же политиками домена, и он вернет содержимое любой удаленной страницы, заданной в вызове функции.
Обратите внимание, что для использования функции file_get_contents
требуется, чтобы директива allow_url_fopen была включена . В противном случае вам придется использовать библиотеки, такие как Curl, для выполнения запроса с PHP.
Если вы контролируете сервер, на который вы отправляете POSTING, вы можете установить политику таким образом, чтобы разрешить POST. См. Этот ответ .
Если вы не контролируете сервер, вам придется настроить прокси-сервер, который вы можете написать на PHP. Все, что он действительно делает, – это передача информации между вашим JavaScript и целевым сервером.
/proxy
/proxy/<original_url>
. /proxy
, вы просто извлекаете метод HTTP, заголовки URL, параметры, тело и т. Д. И делаете точно такой же запрос на целевой сервер. Вы можете использовать cURL или пакет, такой как Guzzle, для этого. Есть также пакет, который обеспечивает эту функцию прокси для вас, но я не знаком с их качеством.