Попытка входа на веб-сайт с помощью Curl

#php #http #authentication #curl

#php #http #аутентификация #curl

Вопрос:

Я новичок в curl и перепробовал много руководств. Последняя попытка, которую я предпринял, заключалась в использовании следующего кода:

 <?php

  // INIT CURL

  $url="";

  function login($url)  {
    $result = "";
    $cookiePath = "/tmp/cookies.txt";
    // Initialize the page
    $page = curl_init();
    // Set some options
    curl_setopt($page, CURLOPT_COOKIESESSION, true);
    curl_setopt($page, CURLOPT_REFERER, 'http://www.justanswer.com/login.aspx');
    curl_setopt($page, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($page, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($page, CURLOPT_HEADER, true);
    curl_setopt($page, CURLOPT_POST, true);
    curl_setopt($page, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($page, CURLOPT_CONNECTTIMEOUT, 30);

    $pattern = "#Set-Cookie: (.*?; path=.*?;.*?)n#";
    preg_match_all($pattern, $result, $matches);
    array_shift($matches);
    $cookie = implode("n", $matches[0]);

    // Use the parsed cookies with the next request
    curl_setopt($page, CURLOPT_COOKIE, $cookie);

    curl_setopt($page, CURLOPT_COOKIESESSION, true);
    curl_setopt($page, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($page, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($page, CURLOPT_HEADER, false);
    curl_setopt($page, CURLOPT_POST, false);

    // Set the URL
    curl_setopt($page, CURLOPT_URL, $url);

    // Set the location of and send the cookies
    curl_setopt($page, CURLOPT_COOKIEJAR, $cookiePath);
    curl_setopt($page, CURLOPT_COOKIEFILE, $cookiePath);

    // Send out POST data
    curl_setopt($page, CURLOPT_POST, 1);
    curl_setopt($page, CURLOPT_POSTFIELDS,                          "__EVENTTARGET=amp;__EVENTARGUMENT=amp;__SSVIEWSTATE=18amp;__VIEWSTATE=amp;email=****amp;sign_in_type=returningamp;username=amp;password=****amp;remember=trueamp;ctl00$BodyContent$btnLogin.x=99amp;ctl00$BodyContent$btnLogin.y=17amp;SC_SID=346833306amp;SC_GUID=d157264a-24e2-47c0-b545-259ea5298e19amp;JS_BOOL=trueamp;__EVENTVALIDATION=/wEWAwL+raDpAgKUnpuXBgKp/+SDCG4uM7n2SYrFbuk10/LkC64jclbvH6dXKmxM06VHN92G");

    // Get the page
    return $page;

  }
  
  $page = login($url);

  // Go to the page and log in
  curl_exec($page);

  // Change the URL to the main page to check to see if the user is logged in
  curl_setopt($page, CURLOPT_URL, "");

  // Print the output
  print curl_exec($page);

?>
 

Пожалуйста, кто-нибудь может объяснить, что я делаю не так, я повторил тот же POST-запрос, используя расширение LIVE HTTP headers в firefox, и это было успешно.

Страница входа находится по адресу http://www.justanswer.com/login.aspx

Пожалуйста, предложите

TIA

Комментарии:

1. В чем именно заключается ошибка, с которой вы столкнулись в коде?

2. Есть ли еще проблема с этим кодом?

Ответ №1:

Попробуйте обернуть переменные формы в виде массива, например:

 $postVars = array("__EVENTTARGET"   => "",
                  "__EVENTARGUMENT" => "",
                  "__SSVIEWSTATE"   => "18",
                  "__VIEWSTATE"     => "",
                  "email"           => "****",
                  "sign_in_type"    => "returning"
                  "foo" => "bar");