Удаленный запрос POST с jQuery и Ajax

Мне нужно сделать запрос POST в удаленном домене trhough Ajax, я знаю, что существует ограничение политики одинакового происхождения, но я прочитал, что может быть возможным сделать мост в PHP на моем сервере для перенаправления запроса.

Дело в том, что я не знаю, как написать этот мост, и я не могу найти информацию о Google.
Думаю, мне нужно использовать CURL.

Может кто-нибудь объяснить мне, как написать?

Если вам нужен прокси-сервер или « мост », вы можете попробовать следующее: вы можете получить простой вызов AJAX для этого PHP-скрипта и перенаправить этот POST на другой желаемый сервер.

Как это работает:

  1. Создайте Proxy.php и вставьте содержимое.
  2. Сделать страницу изначально отправляет запрос на отправку запроса AJAX в proxy.php вместо целевого сервера.
  3. Запрос будет перенаправлен на целевой сервер.
  4. Вы можете указать опцию CURLOPT_RETURNTRANSFER, если хотите получить результат.

Не забудьте сначала поместить некоторые методы проверки подлинности сервера , поскольку я не написал ни одного в этом примере, или эта страница будет хорошей спам-машиной

EDIT: что я имел в виду, это использовать ваш сервер для отправки запроса сбоя на целевой сервер. в любом случае это не так уж плохо для добавления простой аутентификации для ваших пользователей 🙂

некоторые /, где / в / ваш / сервера / proxy.php

<?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 и целевым сервером.

  1. Создайте конечную точку на своем сайте, что-то вроде /proxy
  2. Сделайте свой запрос как обычно, но вместо указания исходного URL-адреса укажите его /proxy/<original_url> .
  3. В файле, который обрабатывает конечную точку /proxy , вы просто извлекаете метод HTTP, заголовки URL, параметры, тело и т. Д. И делаете точно такой же запрос на целевой сервер. Вы можете использовать cURL или пакет, такой как Guzzle, для этого. Есть также пакет, который обеспечивает эту функцию прокси для вас, но я не знаком с их качеством.