PHP cURL重定向到登录页面

PHP cURL重定向到登录页面,php,curl,libcurl,Php,Curl,Libcurl,我试图使用以下php代码绕过“Ubiquiti Networks-CPE”的登录页面。虽然我的代码正确保存了cookie信息,但它无法登录,并且我被重定向到登录页面,并显示错误消息: “无效凭据” 来自实际登录页面的其他信息 请求URL:https://192.168.179.75/login.cgi 申请方式:邮寄 状态代码:302已找到 远程地址:192.168.179.75:443 响应头 视图源 内容类型:text/html 日期:2013年5月28日星期二18:58:05 GMT

我试图使用以下php代码绕过“Ubiquiti Networks-CPE”的登录页面。虽然我的代码正确保存了cookie信息,但它无法登录,并且我被重定向到登录页面,并显示错误消息:

“无效凭据”

来自实际登录页面的其他信息


请求URL:https://192.168.179.75/login.cgi 申请方式:邮寄 状态代码:302已找到 远程地址:192.168.179.75:443 响应头 视图源 内容类型:text/html 日期:2013年5月28日星期二18:58:05 GMT 位置:/index.cgi 服务器:lighttpd/1.4.31 设置cookie:show\u security\u warning=true 设置cookie:ui\u language=en\u US;expires=周二,38年1月19日03:14:07 GMT 传输编码:分块 请求头 视图源 接受:text/html、application/xhtml+xml、application/xml;q=0.9,图像/webp,*/*;q=0.8 接受编码:gzip,deflate,br 接受语言:en-US,en;q=0.8,en GB;q=0.6 缓存控制:最大年龄=0 连接:保持活力 内容长度:332 内容类型:多部分/表单数据;boundary=----WebKitFormBoundarySzepJMCB2JJIDDA Cookie:last_check=1467001323935;AIROS_SESSIONID=8057f38405a60c6a17f05ef8d759bb42;语言=英语 主持人:192.168.179.75 来源:https://192.168.179.75 推荐人:https://192.168.179.75/login.cgi 升级不安全的请求:1 用户代理:Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/51.0.2704.106 Safari/537.36 请求有效载荷 ------WebKitFormBoundarySzepJMCB2JJIDDA 内容配置:表单数据;name=“uri” ------WebKitFormBoundarySzepJMCB2JJIDDA 内容配置:表单数据;name=“username” 无线网桥 ------WebKitFormBoundarySzepJMCB2JJIDDA 内容配置:表单数据;name=“密码” 无线网桥 ------WebKitFormBoundarySzepJMCB2JJIDDA-
PHP代码:

<?php
define('USERNAME', 'ubnt');
define('PASSWORD', 'ubnt');
define('USER_AGENT', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36');

$cookie_file_path = str_replace('\\','/', getcwd().'/cookies');

define('COOKIE_FILE', $cookie_file_path);
define('LOGIN_FORM_URL', 'https://192.168.179.75/login.cgi');
define('REQUESTED_URL', 'https://192.168.179.75/status.cgi');
define('LOGIN_ACTION_URL', 'https://192.168.179.75/login.cgi');

$postValues = array(
    'username' => USERNAME,
    'password' => PASSWORD,
);

$curl = curl_init(LOGIN_FORM_URL);
curl_setopt($curl, CURLOPT_URL, LOGIN_ACTION_URL);

//curl_setopt($curl, CURLOPT_HEADER, 1);
//curl_setopt($curl, CURLOPT_COOKIE,  $cookies);     
//curl_setopt($curl,CURLOPT_COOKIESESSION,'AIROS_SESSIONID=ae60748359be4bd0468f51a346f4f3b9; last_check=1467001323935; show_security_warning=true; ui_language=en_US');
curl_setopt($curl, CURLOPT_COOKIEJAR, COOKIE_FILE);
curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE);

curl_setopt($curl, CURLOPT_POST, true);
//curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
//Set our post fields / date (from the array above).
//curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postValues));


curl_setopt($curl, CURLOPT_POSTFIELDS,$postValues);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

//curl_setopt($curl, CURLOPT_HTTPHEADER, array('REMOTE_ADDR: 192.168.179.75','Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryAbpUbGA4FIs529Z6'));
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Host: 192.168.179.75','Expect: ','Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryAbpUbGA4FIs529Z6'));
curl_setopt($curl, CURLOPT_REFERER, LOGIN_FORM_URL);
$result = curl_exec($curl);

if(curl_errno($curl)){
    throw new Exception(curl_error($curl));
}
//curl_setopt($curl, CURLOPT_URL, 'https://192.168.179.75/status.cgi');
//
//curl_setopt($curl, CURLOPT_COOKIEJAR, COOKIE_FILE);
//curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//$result = curl_exec($curl);
//echo $result;
print_r($result);
curl_close($curl);
?>

  • 设置强制边界(如
    boundary=----WebKitFormBoundaryAbpUbGA4FIs529Z6
    将不起作用。curl生成它将使用的自己的边界。如果您设置了自定义设置,则帖子的格式将不正确。删除整个自定义
    内容类型:
    标题,因为curl本身也会这样做。您也不需要像这样设置
    Host:
    头,curl从您使用的URL中提取必要的主机

  • 登录页面可能甚至可能会设置您在发布登录帖子时需要的cookies。这是一种常见的做法。为了实现这一点,您首先需要获得登录页面并存储cookies,然后在随后的登录帖子中使用它们

  • 您希望让curl遵循登录帖子最有可能发送给您的重定向。将
    CURLOPT_FOLLOWLOCATION
    设置为true

  • 设置强制边界(如
    boundary=----WebKitFormBoundaryAbpUbGA4FIs529Z6
    将不起作用。curl生成它将使用的自己的边界。如果您设置了自定义设置,则帖子的格式将不正确。删除整个自定义
    内容类型:
    标题,因为curl本身也会这样做。您也不需要像这样设置
    Host:
    头,curl从您使用的URL中提取必要的主机

  • 登录页面可能甚至可能会设置您在发布登录帖子时需要的cookies。这是一种常见的做法。为了实现这一点,您首先需要获得登录页面并存储cookies,然后在随后的登录帖子中使用它们

  • 您希望让curl遵循登录帖子最有可能发送给您的重定向。将
    CURLOPT_FOLLOWLOCATION
    设置为true


  • 不知道什么会失败。。。您只需检查2点:1-尝试删除“CURLOPT_HTTPHEADER”。。。让curl来处理它们,然后2-尝试强制HTTP 1.1:CURLOPT_HTTP_VERSION-->curl_HTTP_VERSION_1_1不知道会出现什么故障。。。您只需检查2点:1-尝试删除“CURLOPT_HTTPHEADER”。。。让curl处理它们,2-尝试强制HTTP 1.1:CURLOPT_HTTP_VERSION-->curl_HTTP_VERSION_1
    <?php
    define('USERNAME', 'ubnt');
    define('PASSWORD', 'ubnt');
    define('USER_AGENT', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36');
    
    $cookie_file_path = str_replace('\\','/', getcwd().'/cookies');
    
    define('COOKIE_FILE', $cookie_file_path);
    define('LOGIN_FORM_URL', 'https://192.168.179.75/login.cgi');
    define('REQUESTED_URL', 'https://192.168.179.75/status.cgi');
    define('LOGIN_ACTION_URL', 'https://192.168.179.75/login.cgi');
    
    $postValues = array(
        'username' => USERNAME,
        'password' => PASSWORD,
    );
    
    $curl = curl_init(LOGIN_FORM_URL);
    curl_setopt($curl, CURLOPT_URL, LOGIN_ACTION_URL);
    
    //curl_setopt($curl, CURLOPT_HEADER, 1);
    //curl_setopt($curl, CURLOPT_COOKIE,  $cookies);     
    //curl_setopt($curl,CURLOPT_COOKIESESSION,'AIROS_SESSIONID=ae60748359be4bd0468f51a346f4f3b9; last_check=1467001323935; show_security_warning=true; ui_language=en_US');
    curl_setopt($curl, CURLOPT_COOKIEJAR, COOKIE_FILE);
    curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE);
    
    curl_setopt($curl, CURLOPT_POST, true);
    //curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    //Set our post fields / date (from the array above).
    //curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postValues));
    
    
    curl_setopt($curl, CURLOPT_POSTFIELDS,$postValues);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    
    //curl_setopt($curl, CURLOPT_HTTPHEADER, array('REMOTE_ADDR: 192.168.179.75','Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryAbpUbGA4FIs529Z6'));
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Host: 192.168.179.75','Expect: ','Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryAbpUbGA4FIs529Z6'));
    curl_setopt($curl, CURLOPT_REFERER, LOGIN_FORM_URL);
    $result = curl_exec($curl);
    
    if(curl_errno($curl)){
        throw new Exception(curl_error($curl));
    }
    //curl_setopt($curl, CURLOPT_URL, 'https://192.168.179.75/status.cgi');
    //
    //curl_setopt($curl, CURLOPT_COOKIEJAR, COOKIE_FILE);
    //curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT);
    //curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    //curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    //$result = curl_exec($curl);
    //echo $result;
    print_r($result);
    curl_close($curl);
    ?>