Помогите с логином на сайт с PHP + cURL - PullRequest
1 голос
/ 13 июня 2011

Я искал помощи по проблеме, с которой я использовал cURL для получения информации с сайта.

Я новичок, использующий cURL, поэтому мне нужно несколько советов с этим. Мне нужно автоматически войти на 3dstats.com, а затем восстановить список данных. Со списком проблем нет, я уже работаю над решением; это логин, который я не могу получить на работу. Форма входа в систему после значительной очистки выглядит примерно так:

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta name="generator" content=
    "HTML Tidy for Windows (vers 14 February 2006), see www.w3.org" />
    <title></title>
  </head>
  <body>
    <form action="/cgi-bin/edit2.cgi" method="post">
      <input type="hidden" name="type" value="2" />
      <input type="text" class="flinput" size="40" name="usr" value="00000000" />
      <input type="password" size="40" name="UsrPass" class="flinput" />
      <input type="submit" value="Submit " class="binput" />
    </form>
  </body>
</html>

Итак, мне нужно отправить 3 переменные, type, usr и UsrPass. Если я сохраню эту страницу и нажму «Отправить», форма будет работать нормально (конечно, после изменения полей на скрытые и заполнения их правильными значениями для входа в систему). Однако, если я сделаю это:

<code><?php  
  $ch     = curl_init();
  curl_setopt($ch, CURLOPT_URL, "http://3dstats.com/cgi-bin/edit2.cgi");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_POST, true);

  $data   = array("type"    => "44",
                  "usr"     => "correct8-digitNumber",
                  "UsrPass" => "correctPassword");

   curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
   curl_setopt($ch, CURLOPT_COOKIEJAR,  '/3dstats/cookies.txt');
   curl_setopt($ch, CURLOPT_COOKIEFILE, '/3dstats/cookies.txt');

   $output = curl_exec($ch);
   $info   = curl_getinfo($ch);

   echo "<pre>";
   print_r($info);
   echo "
"; вывод echo $; curl_close ($ ч); ?>

форма возвращает: «Ошибка: неправильная учетная запись», с номером учетной записи, уже заполненным до «0000» (обратите внимание на пробел). Счет представляет собой 8-значный номер.

Есть идеи, что я делаю не так? Страница говорит, что использует куки. Какова правильная форма захвата / использования их позже? То, что я пытаюсь, похоже, не работает.
Заранее благодарим за любую помощь / совет.

Ответы [ 2 ]

2 голосов
/ 24 сентября 2011

Чтобы ответить на мой собственный вопрос и для дальнейшего использования, он работал следующим образом:

$cookie_file_path = getcwd() . '/cookie.txt';
//Emulating Chrome Browser:
$agent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/A.B (KHTML, like Gecko) Chrome/X.Y.Z.W Safari/A.B.";

/*  Login part of the code -- start */

//First, get and write session cookie:
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL,'http://3dstats.com/cgi-bin/edit2.cgi');
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookie_file_path);

$loginpage_html = curl_exec ($ch);

curl_close ($ch);

//Now, use the session cookie to actually log in:
$POSTFIELDS = "type=44&usr=". $your_username ."&UsrPass=". $your_password;  

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL,'http://3dstats.com/cgi-bin/edit2.cgi');
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$POSTFIELDS); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_REFERER, 'http://3dstats.com/cgi-bin/edit2.cgi');
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookie_file_path);

$logon_result = curl_exec ($ch);
curl_close ($ch);

Логин теперь работает.

0 голосов
/ 13 июня 2011

У меня была та же самая проблема несколько дней назад, решение, которое я нашел самым простым и легким в техническом отношении, заключалось в том, чтобы попросить владельца сайта сделать ту страницу, к которой вы пытаетесь получить доступ, общедоступной.Дополнительные сведения помогут вам, если вы сообщите нам, является ли этот сайт вашим или внешним сайтом, с которого вы пытаетесь получить данные.

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