微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

帮助使用PHP + cURL登录网站

如何解决帮助使用PHP + cURL登录网站

| 我一直在寻找有关使用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个变量,类型,usr和UsrPass。如果我保存此页面并单击Submit,则该表单可以正常工作(当然,在将字段更改为hidden并使用正确的登录值填充它们之后)。 但是,如果我这样做:
<?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 \"</pre>\";

   echo $output;

   curl_close($ch);
?>
表格返回:\“错误错误的帐户\”,并且帐户号已填充为\“ 0000 \”(注意空格)。该帐户是一个8位数字。 关于我在做什么错的任何想法吗?该页面说它正在使用cookie。以后捕获/使用它们的正确形式是什么?我正在尝试的似乎不起作用。 在此先感谢您的帮助/建议。     

解决方法

        为了回答我自己的问题并供将来参考,它的工作方式如下:
$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,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_POST,1); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$POSTFIELDS); 
curl_setopt($ch,CURLOPT_REFERER,$cookie_file_path);

$logon_result = curl_exec ($ch);
curl_close ($ch);
现在可以登录。     ,        几天前我遇到了同样的问题,从技术上讲,我发现最简单,最容易解决的解决方案是要求站点所有者将您要访问的页面制作为要公开显示的页面。如果您告诉我们该站点是您的站点还是外部站点,您将尝试获取更多信息。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。