Здравствуйте, мне нужно реализовать кросс доменный post запрос. У меня есть сайт, на нем находится гиперссылка. По нажатию на гиперссылку должен идти post запрос на другой сервер на защищенную страницу (https). Прочитал в интернете, что можно реализовать через proxy.
Что мне нужно: Послать на другой сервер на защищенную страницу (https) данные в формате json и c заголовком (content type) application/json.
Ответ от сервера будет тоже в json с заголовком application/json.
Вот что у меня есть:
файл sample.html:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script type="text/javascript" src="http://site.ru/jquery.js"></script>
<script type="text/javascript">
var proxy_url = 'http://site.ru/proxy.php';
var ajax_url = 'https://site2.ru/example'; //другой сервер, на который должен идти post запрос!
var people ={"FirstName":"Oleg","LastName":"Ivanov","amount":2.0};
$(document).ready(function(){
$('#link').click(function(){
$.ajax({
type: 'POST',dataType:'json',contentType:'application/json', url: proxy_url,data:people,
success: function(res) {
flag = res.substring(0, 2);
if (flag == '0|') alert('Ошибка: ' + res.substring(2, res.length));
else alert('Удачно: ' + res);
},
error: function(xhr, er_type) { alert('Ошибка: ' + er_type); }
});
});
});
</script>
</head>
<body>
<a href="#" id="link">Запрос</a>
</body>
</html>
Файл proxy.php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
<?php
error_reporting(0);
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])
|| $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest'
|| !count($_POST) || !isset($_POST['ajax_url']))
die("0|Неверный запрос");
$url_info = parse_url($_POST['ajax_url']);
unset($_POST['ajax_url']);
$data = array();
foreach ($_POST as $k => $v) $data[] = $k.'='.$v;
$data = implode('&', $data);
$fp = @fsockopen(@$url_info['host'], 80, $errno, $errstr, 6);
if (!$fp) die("0|Не могу соединиться с ".@$url_info['host']);
$out = "POST ".@$url_info['path']." HTTP/1.1\r\n";
$out .= "Host: ".@$url_info['host']."\r\n";
$out .= "Referer: /misc/proxy.php\r\n";
$out .= "User-Agent: Opera\r\n";
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Content-Length: ".strlen($data)."\r\n\n";
$out .= "Connection: close\r\n\r\n";
$out .= $data;
fputs($fp, $out);
$in = '';
while (($line = fgets($fp, 8192))!==false) $in .= $line;
fclose($fp);
fputs($fh, $in);
fclose($fh);
$out = substr($in, strpos($in, "\r\n\r\n") + 4);
header("Content-type:text/plain; charset=utf-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
print $out;
?>
Запрос идет, но приходит ответ, что parseerror. Мне кажется, что неправильно в proxy.php. Что данные идут не в json формате..
Прошу помощи. Пожалуйста.