скручиваемость отправка GET вместо POST - PullRequest
3 голосов
/ 05 июня 2009

На самом деле, это стало настолько грязным, что я даже не уверен, что кроль является виновником. Итак, вот php:

$creds = array(
    'pw' => "xxxx",
    'login' => "user"
    );

$login_url = "https://www.example.net/login-form"; //action value in real form.
$loginpage = curl_init();

curl_setopt($loginpage, CURLOPT_HEADER, 1);
curl_setopt($loginpage, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($loginpage, CURLOPT_URL, $login_url);
curl_setopt($loginpage, CURLOPT_POST, 1);
curl_setopt($loginpage, CURLOPT_POSTFIELDS, $creds);

$response = curl_exec($loginpage);
echo $response;

Я получаю заголовки (которые соответствуют заголовкам нормального, успешного запроса), за которыми следует страница входа (я предполагаю, что завиток захвачен этим из-за перенаправления), который имеет ошибку с эффектом «Плохой тип контакта» ».

Я думал, что проблема была в том, что в запросе был задан хост запрашивающего сервера, а не удаленного сервера, но потом я заметил (в Firebug), что запрос отправляется как GET, а не POST.

Если я скопирую форму сайта входа в систему, урежу ее до элементов формы со значениями и введу полный URL-адрес для действия, это прекрасно работает. Поэтому я думаю, что это не проблема безопасности, когда запрос на вход в систему должен исходить от того же сервера и т. Д. (Я даже избавляюсь от пустых скрытых значений и всех JS, которые устанавливают некоторые из других файлов cookie).

Опять же, я довольно быстро запутался.

Есть идеи, почему он отображается как GET или почему он не работает?

Ответы [ 4 ]

2 голосов
/ 09 августа 2009

При устранении неполадок всего класса проблем, связанных с PHP-cURL, вам просто нужно включить CURLOPT_VERBOSE и дать CURLOPT_STDERR дескриптор файла.

tail -f вашего файла, сравните заголовки и ответ с теми, которые вы видите в Firebug, и проблема должна стать понятной.

1 голос
/ 07 июня 2009

Показанный код выполняет многоэлементную формпост (поскольку вы передаете хэш-массив параметру POSTFIELDS), что, вероятно, не соответствует ожиданиям целевого сервера.

1 голос
/ 05 июня 2009

Запрос сделан с сервера и не будет отображаться в Firebug. (Возможно, вы перепутали это с другим запросом вашего браузера). Используйте wireshark , чтобы узнать, что на самом деле происходит. Вы не устанавливаете CURLOPT_FOLLOWLOCATION; перенаправления не должны выполняться.

Подводя итог: Угадай меньше, пост больше. Ссылка на дамп pcap, и мы сможем точно сказать, что вы делаете неправильно; или опубликуйте точный вывод скрипта php, и мы могли бы.

0 голосов
/ 09 августа 2009

попробуйте добавить print_r(curl_getinfo($loginpage)) в конце, посмотрите, какие данные заголовка были отправлены обратно.

также, если вы пытаетесь фальсифицировать, что вы входите с их сайта, вы захотите убедиться, что вы отправили правильного реферала со своим постом, чтобы они "думали", что вы были на сайте, когда вы его отправляли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...