php - 如何使用带有 POST 和 Cookie 的 cURL 登录

标签 php forms cookies curl authentication

服务器成功接收登录名、密码和验证码。如何使用 cookie 做到这一点?

我不知道需要什么信息来帮助我将全部显示:

登录表单:

<div id="loginForm">
 <div id="logo"><img src="logo.png" border="0" /></div>
 <div class="loginBar">Login</div>
  <form action="index.php" method="post">
    <input type="hidden" name="p" value="login" />
    <div class="line">
      <label>Captcha</label>
      <img src="captcha/securimage_show.php" border="0" />
    </div>
    <div class="line">
      <label>&nbsp;</label>
      <input type="text" name="captcha" value=""/>                
    </div>
    <div class="line">
      <label>&nbsp;</label>
      <input type="submit" value="Login" />
    </div>
  </form>                        
 <hr/>
 <a href="index.php?p=register" class="register" title="Click to register">Register</a>
</div>

curl 代码:

    extract($_POST);

    //set POST variables
    $proxy = '127.0.0.1:8118';
    $url = 'http://example.com/index.php';
    $fields_string= 'p=login&user=' . $user . '&pass=' . $passwd . '&captcha=' . $_POST['captcha'] . '&submit=Login';

        //open connection
        $ch = curl_init();

        //set the url, number of POST vars, POST data
        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
        curl_setopt($ch,CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch,CURLOPT_PROXY, $proxy);
        curl_setopt($ch,CURLOPT_COOKIEJAR, "cookie.txt");
        curl_setopt($ch,CURLOPT_COOKIEFILE, "cookie.txt");
    //curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
        //execute post
        $result = curl_exec($ch);

        print_r(curl_error($ch));
        print_r(curl_getinfo($ch));
        print_r(curl_errno($ch));

        //close connection
        curl_close($ch);

curl 获取信息:

[url] => http://example.com/index.php 
[content_type] => text/html 
[http_code] => 200 
[header_size] => 415 
[request_size] => 325 
[filetime] => -1 
[ssl_verify_result] => 0 
[redirect_count] => 0 
[total_time] => 1.549389 
[namelookup_time] => 3.7E-5 
[connect_time] => 0.000138 
[pretransfer_time] => 0.000142 
[size_upload] => 62 
[size_download] => 1585 
[speed_download] => 1022 
[speed_upload] => 40 
[download_content_length] => 1585 
[upload_content_length] => 0 
[starttransfer_time] => 1.27051 
[redirect_time] => 0 
[certinfo] => Array ( ) 
[redirect_url] =>

真正的 cookies :

Host:                 example.com
Name:                 PHPSESSID
Path:                 /
Content:              7qk7bb17nr030g5j59h2gq3nq6
Content raw:          7qk7bb17nr030g5j59h2gq3nq6
Expires:              At end of session
Expires raw:          0
Send for:             Any type of connection
Send for raw:         false
Created:              Fri 25 Nov 2011 10:37:24 PM EET
Created raw:          1322253443569272
Last accessed:        Sat 26 Nov 2011 11:06:02 AM EET
Last accessed raw:    1322298361723991
HTTP only:            No
HTTP only raw:        false
This domain only:     No
This domain only raw: false
Policy:               no information available
Policy raw:           0
Status:               no information available
Status raw:           0
---

libcurl 在 cookie.txt 中生成的文件:

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

example.com FALSE   /   FALSE   0   PHPSESSID   crs9cm100agdfsujsncr964jg7

当我运行此代码时,服务器成功接收到帐户、密码和验证码,但 cookie 有错误:

Make sure you've cookies enabled

我还看到真正的 cookie 原始内容与使用 libcurl 生成的不同。

我还从我的表单中看到我成功捕获了网络服务器 cookie。

附言!!我从登录表单中的此链接收到 cookie:

  <img src="captcha/securimage_show.php" border="0" />

最佳答案

可能是属性缺失的原因

curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);

这样 curl 将被迫忽略“旧” session cookie 并开始一个新 session 。

关于php - 如何使用带有 POST 和 Cookie 的 cURL 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281815/

相关文章:

php - 我的 MySQL 函数在乘以小数时完全失去了数学精度。这是为什么?

javascript - PHP 数字格式不允许 jquery sum

javascript - 使用相同函数的多个表单提交

forms - 使用formBuilder angular2获取 View 中的字段值

PHP Hit Counter...我可以将 SESSION 转换为 COOKIE 吗?

ruby-on-rails - 从 Rails 中的 ActionDispatch::IntegrationTest 访问 cookie

php - 在 mySQL 查询中使用 MAX() 会产生有问题的结果

php - 错误 : Call to a member function get() on a non-object

html - 输入,更改文本后的文本区域样式?

javascript - 通过jquery清除cookie?