2013-08-02 3 views
0

Я схватил следующее сообщение запроса с Скрипач, я только маскировал URL, потому что я не хочу, чтобы сделать рекламное объявлениезаголовок HTTP POST запрос с Curl

POST http://xyz.com/dialogs/track HTTP/1.1 
Host: www.xyz.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:10.0) Gecko/20100101 Firefox/10.0 
Accept: application/json, text/javascript, */*; q=0.01 
Accept-Language: de 
Accept-Encoding: gzip, deflate 
DNT: 1 
Content-Type: application/json; charset=utf-8 
X-CSRFToken: uuihXszJrkrXwnCkLKKDNQ8BrPRDqXvU 
X-Requested-With: XMLHttpRequest 
Referer: http://www.xyz.com/referer/ 
Content-Length: 2 
Cookie: csrftoken=uuihXszJrkrXwnCkLKKDNQ8BrPRDqXvU 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 

{} 

Мне нужна учебник (ссылка будет полезно), чтобы " fake "этот запрос с Curl, я нашел кое-что в Google, но ничего не работает, я получаю ошибки.

-EDIT-

$headers = array(
'POST http://www.example.com/dialogs/track HTTP/1.1', 
'Host: www.example.com', 
'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:10.0) Gecko/20100101 Firefox/10.0', 
'Accept: application/json, text/javascript, */*; q=0.01', 
'Accept-Language: de', 
'Accept-Encoding: gzip, deflate', 
'DNT: 1', 
'Content-Type: application/json; charset=utf-8', 
'X-CSRFToken: uuihXszJrkrXwnCkLKKDNQ8BrPRDqXvU', 
'X-Requested-With: XMLHttpRequest', 
'Referer: http://www.example.com', 
'Content-Length: 2', 
'Cookie: __cfduid=d0db16cb5c4c58db770a1374f09a61d7d1375100590810; csrftoken=uuihXszJrkrXwnCkLKKDNQ8BrPRDqXvU; __utma=1.2111538523.1375265099.1375427020.1375431064.5; __utmz=1.1375348556.2.2.utmcsr=example.de|utmccn=(referral)|utmcmd=referral|utmcct=/game/index.php; __gads=ID=88f0a0a8b0698e1e:T=1375265099:S=ALNI_MYX8OxkwPxXQd7VY4qDImLK7fq_yQ; __utmb=1.4.9.1375431089319; __utmc=1', 
'Connection: keep-alive', 
'Pragma: no-cache', 
'Cache-Control: no-cache', 
'', 
'{}' 
); 



//set POST variables 
$url = 'http://www.example.com/dialogs/track'; 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL, $url); 
curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); 


//execute post 
$result = curl_exec($ch); 

//close connection 
if (curl_error($ch)) { 
print "Error: " . curl_error($ch); 
} 
else 
{ 
var_dump($data); 
curl_close($ch); 
} 

Сообщение об ошибке

Error: Recv failure: Connection reset by peer

-Edit 2-

я играл немного вокруг, а теперь соединение работает, но мне кажется, что CSRF Токен не правильно подает, я получаю сообщение об ошибке!

Forbidden (403)

CSRF verification failed. Request aborted.

Это их решение?

+0

Добро пожаловать в переполнение стека. Не могли бы вы уточнить, что вы уже написали, и какие именно ошибки вы получаете? Это поможет нам разобраться, что вам нужно сделать, чтобы это работало. Вы хотите посмотреть на использование curl_setopt (CURLOPT_HTTPHEADER, array (...)); 'для настройки заголовков точно так же, как и в этом запросе. Без более конкретной информации, я думаю, http://codular.com/curl-with-php - лучшее, на что я могу указать. – kander

+0

Хорошо, я отредактировал мой пост –

ответ

0

Ваш отсутствующий:

curl_setopt($ch, CURLOPT_POST, true); 

Я думаю, что ваш вопрос не с Curl, но с тем, как работает CSRF проверка.

Допустим, что запрос выполняется сервером, на котором сервер устанавливает сеанс (в основном строка в файле cookie, который идентифицирует вас на данных на сервере). Затем вы отправляете эти данные обратно на сервер, где он сравнивает токен CSRF с токеном SESSION, связанным с COOKIE, который вы также отправили обратно.

В вашем запросе есть только один возможный сеансовый файл cookie - csrftoken (остальные принадлежат google и cloudflare).

Это означало бы, что CSRF токен и идентификатор сеанса (csrftoken значение) точно таким же uuihXszJrkrXwnCkLKKDNQ8BrPRDqXvU то есть, что не то, как работает проверка CSRF.

Вы должны получить куки сессии и маркер CSRF, когда GET ответ возвращается и отправить их обоих обратно, один в качестве значения COOKIE, другой как POST значение (возможно, 2 значения заголовка, но 2 разные значения) когда вы делаете свой запрос POST.

Смежные вопросы