想用CURL实现豆瓣网的模拟登录,可是怎么试都不成功,不知错在哪里,请高手们给指点一下吧?
<?php$login_url = 'https://www.douban.com/accounts/login';$post_fields['form_email'] = '[email protected]';
$post_fields['form_password'] = 'xxxxxxxx';//cookie文件存放在网站根目录的temp文件夹下
$cookie_file = tempnam('./temp','cookie');$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_exec($ch);
curl_close($ch);//带上cookie文件转向首页看看
$send_url='http://www.douban.com/';
$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$contents = curl_exec($ch);
curl_close($ch);
unlink($cookie_file);
print_r($contents);
?>
如此并没有实现登录,不知道错在哪。
通过httpwatch抓取的POST包也就包含了email和pwd两项内容。所以真不知道错在哪里了。

解决方案 »

  1.   

    好像$cookie_file文件内容始终为空·~根本没写进cookie·~也就是说 post表单好像少了几个吧 应该··
      

  2.   

    我在windows下测试的 同时也看了文件的属性 可写~~很奇怪的一个问题····
      

  3.   

    Window文件可写,不代表Web服务器上该文件可写
      

  4.   

    if (is_writable($cookie_file)) {
    echo 'is writable';;
    }确定是可写的··
      

  5.   

    这代码写的太杂了一点,用php snoppy吧,这是一个很好的类库,有很多东西是现成的,不用自己再造轮子。
      

  6.   

    确实snoopy很好用,但是想理解其中的道理还是用curl好些!
      

  7.   

    原因是https的问题····具体实现还在研究当中!
      

  8.   

    使用SSL的话,可以试试
             if ( $this->_isSSL )
             {
              curl_setopt($s, CURLOPT_SSL_VERIFYHOST, 0);
              curl_setopt($s, CURLOPT_SSL_VERIFYPEER, 0);
             }