我似乎无法弄清楚如何登录网站并获取HTML

时间:2016-04-13 01:54:09

标签: php html curl

这是按钮的HTML

<form id="loginbox_form" class="okform initialized" method="post" action="https://www.okcupid.com/login">
    <div id="login_usernameContainer" class="inputcontainer input empty">
        <input id="login_username" name="username" placeholder="Your email or username"><span class="okform-feedback message empty" style="height: 0"></span>
        <div class="icon okicon"></div>
    </div>
    <div id="login_passwordContainer" class="inputcontainer input empty">
        <input id="login_password" type="password" name="password" placeholder="Password"><span class="okform-feedback message empty" style="height: 0"></span>
        <div class="icon okicon"></div>
    </div>
    <button type="submit" id="sign_in_button" class="flatbutton">Let’s go</button>
</form>

我正在尝试创建一个尝试登录的简单脚本,然后在登录后获取HTML。

如果帐户信息无效,则现在HTML

中有此字符串
  

您的信息不正确。再试一次。

这是我到目前为止的代码

<?php 
$username = 'FAKEUSERNAME';
$password = 'FAKEPASSWORD';
$loginUrl = 'http://www.okcupid.com/login';
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'login_username='.$username.'&login_password='.$password);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$store = curl_exec($ch);
$content = curl_exec($ch);
curl_close($ch);
echo $content;
 ?>

但无论出于何种原因,当我打开我的.php页面时,我只是获得了okcupid.com的登录页面。我只是希望能够查看帐户登录是否失败。

另一个想法是尝试登录页面,然后转到另一个页面,看看该页面是否加载。您登录时只能访问的页面是

  

http://www.okcupid.com/profile

1 个答案:

答案 0 :(得分:0)

登录数据应设置为cookie,并在下一个请求时将其读回。

   curl -c cookies.txt -d "username=uname&password=yourpassword" http://site/login

要设置Cookie,请在后续请求中使用以下代码。

  curl -b cookies.txt http://site/newpage

在PHP中,这是使用curl设置cookie的方法。

    curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookieFileName");

已由您完成。

并且为了阅读cookie,您可以使用

     curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookieFileName");

以下是您更新的登录代码

 <?php 
     $username = 'FAKEUSERNAME';
     $password = 'FAKEPASSWORD';
     $loginUrl = 'http://www.okcupid.com/login';
     $agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;   .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $loginUrl);
     curl_setopt($ch, CURLOPT_POST, 1);
     curl_setopt($ch, CURLOPT_POSTFIELDS, 'login_username='.$username.'&login_password='.$password);
     curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
     curl_setopt($ch, CURLOPT_USERAGENT, $agent);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
     curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     $store = curl_exec($ch);
     $content = curl_exec($ch);
     curl_close($ch);
     echo $content;
   ?>

并且,对于登录后的后续请求,代码将如下所示:

   <?php
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
   curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
   curl_setopt($ch, CURLOPT_URL,"http://www.okcupid.com/afterlogin.php"); 
   $content = curl_exec ($ch);
   curl_close ($ch);
   echo $content;
   ?>

确保您为cookie文件指定了正确的路径。