post ответ Disallowed Key Characters

Samail
На сайте с 10.05.2007
Offline
369
803

Пытаюсь сделать авторизацию через сторонний сайт.

Скрипт:


<!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=utf-8">
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
var proxy_url = '/proxy.php';
var ajax_url = 'http://123.com/ajax/auth/123';
$(document).ready(function(){
$('#link').click(function(){
var data = new Object();
data.username = '123@ya.ru';
data.password = '123';
data.ajax_url = ajax_url;
$.ajax({
type: 'POST', url: proxy_url, dataType: 'html', data: data,
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:


<?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: /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;
?>

Отправляется запрос: username=123%40ya.ru&password=123&ajax_url=http%3A%2F%2123.com%2Fajax%2Fauth%123

Приходит ответ:


Disallowed Key Characters.<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.4.3</center>
</body>
</html>

А должен вернуться access_token ...что я делаю не так?

ДП
На сайте с 23.11.2009
Offline
203
#1

Для начала попробуйте авторизоваться на сайте, с которого приодит 400 ошибка из браузера и посмотреть на запросы/ответы и их заголовки.

Samail
На сайте с 10.05.2007
Offline
369
#2

Дикий пионер, там убрали форму авторизации. То есть не убрали, а поменяли на uLogin, а мне нужно по старому авторизоваться. Человек у которого авторизация работает писал:


надо послать POST запрос username={0}&password={1}
там возвращается access_token

Вот всё что я имею. А человека давно в сети не было что-бы подробнее поспрашивать.

ДП
На сайте с 23.11.2009
Offline
203
#3

А зачем вы тогда передаете туда ajax_url?

Попробуйте каким-нибудь генератором POST-запросов сконструировать простейший post-запрос, на который сможете получить ответ.

Ну или мне в личку адрес формы киньте - попробую завтра постучаться post-запросами, чтобы посмотреть, когда 400 ошибку выдает.

Samail
На сайте с 10.05.2007
Offline
369
#4
Дикий пионер:
Попробуйте каким-нибудь генератором POST-запросов

Генератором приходит нужный ответ ...что-то в коде неправильно видимо :)

Samail
На сайте с 10.05.2007
Offline
369
#5

Начали приходить ответы. Три варианта.

Как вот здесь


success: function(res) {
flag = res.substring(0, 2);
if (flag == '0|') alert('Ошибка: ' + res.substring(2, res.length));
else alert('Удачно: ' + res);

Указать:

если {"error":{"code":112,"message":"Not exist username."}}

alert('Неправильный логин');

если {"error":{"code":113,"message":"Wrong password."}}

alert('Неправильный пароль');

если {"result":{"access_token":"fiu258meub3ilg3l9gmoiekca3"}}

$("#flash-form").html(<p>fiu258meub3ilg3l9gmoiekca3</p>);

Samail
На сайте с 10.05.2007
Offline
369
#6

Написал так:


if (res.substring(17, 20) == '112') alert('Неверный логин');
else
if (res.substring(17, 20) == '113') alert('Неверный пароль');
else
at = res.substring(27, 53)
$("#flash-form").html(at);

Может неправильно написал, но работает.

siv1987
На сайте с 02.04.2009
Offline
427
#7

var code = res.substring(17, 20);

if(code == 112){

}

elseif(code == 113){

}

else{

}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий