Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Post запрос / 1 сообщений из 1, страница 1 из 1
07.04.2012, 21:43:28
    #37743402
Dr1emaver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Post запрос
Здравствуйте, мне нужно реализовать кросс доменный post запрос. У меня есть сайт, на нем находится гиперссылка. По нажатию на гиперссылку должен идти post запрос на другой сервер на защищенную страницу (https). Прочитал в интернете, что можно реализовать через proxy.
Что мне нужно: Послать на другой сервер на защищенную страницу (https) данные в формате json и c заголовком (content type) application/json.
Ответ от сервера будет тоже в json с заголовком application/json.

Вот что у меня есть:
файл sample.html:
Код: sql
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
Код: sql
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 формате..
Прошу помощи. Пожалуйста.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Post запрос / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]