Кросс-доменный запрос для javascript

Как то для одного проекта потребовалось сделать кросс-доменный запрос с помощью javascript. Как известно политика безопасности не позволяет такое делать. Но есть разные «грязные» хаки которые все таки обходят эту политику. Из всех вариантов, я выбрал самый надежный и простой в реализации.

Прокси скрипт php на серверной стороне. Суть простая мы ajax запросом посылаем параметры на наш прокси скрипт, а он в свою очередь делает запрос на указанный в параметре action адрес. После получения результата, отдает его скрипту.

На клиентской стороне

param = {
    action: 'http://....', // куда отсылаем запрос
    param1: ..., // какой то параметр 1
    param2: ..., // какой то параметр 2
    param3: ...  // какой то параметр 3
}

jQuery.ajax({
    type: "POST",
    url: "proxy.php",
    dataType: "json",
    data: param,
    success: function(res){
        ...
    }
});

На серверной стороне

<?php

    function msg($status, $msg) {
        $res = array(
            'status' => $status,
            'msg' => $msg
        );
        echo json_encode($res);
        exit();
    }

    function post() {
        unset($_POST['action']);
        $data = array();
        foreach ($_POST as $k => $v) {
            $data[] = $k.'='.$v;
        }
        return implode('&', $data);
    }

    if (! isset($_POST)) {
        msg(false, 'Не заполненые поля');
    }

    $url = $_POST['action'];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, post() );
    $result = curl_exec($ch);
    curl_close($ch);

    msg(true, $result);

?>

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>