Curl https登录 [英] Curl https login

查看:265
本文介绍了Curl https登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要尝试登录 https://www.reporo.com/login.php使用Curl。这里是我使用的代码:

 <?php 
function createPostString($ aPostFields){
foreach($ aPostFields as $ key => $ value){
$ aPostFields [$ key] = urlencode($ key。'='。$ value);
}

return urlencode(implode('&',$ aPostFields));
}

$ postFields ['username'] ='login';
$ postFields ['password'] ='pass';
$ postFields ['submit'] ='';

$ curl = curl_init();
curl_setopt($ curl,CURLOPT_URL,'https://www.reporo.com/login.php');
curl_setopt($ curl,CURLOPT_REFERER,'https://www.reporo.com/login.php');
curl_setopt($ curl,CURLOPT_USERAGENT,'Mozilla / 5.0(Windows; U; Windows NT 5.1; pl; rv:1.9.2.13)Gecko / 20101203 Firefox / 3.6.13');
curl_setopt($ curl,CURLOPT_FOLLOWLOCATION,false);
curl_setopt($ curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ curl,CURLOPT_SSL_VERIFYHOST,2);
curl_setopt($ curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ curl,CURLOPT_COOKIEFILE,dirname(__ FILE__)。'/cookies.txt');
curl_setopt($ curl,CURLOPT_COOKIEJAR,dirname(__ FILE__)。'/cookies.txt');
curl_setopt($ curl,CURLOPT_POST,TRUE);
curl_setopt($ curl,CURLOPT_POSTFIELDS,createPostString($ postFields));

curl_exec($ curl);
header('Location:https://www.reporo.com/analytics/dashboard.php');
curl_close($ curl)


?>

使用脚本后,它会将我重定向到 http://best-payroll-services.info/adder/login.php 。问题在哪里?



在var_dump(curl_getinfo($ c))之后,我有:

 'url'=> string'https://www.reporo.com/login.php'(length = 32)
'content_type'=> string'text / html'(length = 9)
'http_code'=> int 200
'header_size'=> int 382
'request_size'=> int 192
'filetime'=> int -1
'ssl_verify_result'=> int 20
'redirect_count'=> int 0
'total_time'=> float 0.843
'namelookup_time'=> float 0
'connect_time'=> float 0.109
'pretransfer_time'=> float 0.531
'size_upload'=> float 255
'size_download'=> float 3233
'speed_download'=> float 3835
'speed_upload'=> float 302
'download_content_length'=> float 3233
'upload_content_length'=> float 255
'starttransfer_time'=> float 0.655
'redirect_time'=> float 0
'certinfo'=>
array
empty
'redirect_url'=> string''(length = 0)

问候。




  • p>您需要更改Cookie的相对路径:

      if(file_exists('cookies.txt'))

    到一个绝对

      if(file_exists(dirname(__FILE__)。'/ cookies.txt'))


  • 还有 str_replace('/','',$ _SERVER [PHP_SELF ]); 是一个返回函数。这意味着您需要存储返回的值:

      $ redirect_url = str_replace('/','',$ _SERVER [ PHP_SELF]); 
    header('Location:'。$ redirect_url);




我稍微修改了您的代码:

  function connect($ url,$ post ='')
{
$ curl = curl_init ();
curl_setopt($ curl,CURLOPT_URL,$ url);
curl_setopt($ curl,CURLOPT_USERAGENT,'Mozilla / 5.0(Windows NT 6.1)AppleWebKit / 534.30(KHTML,像Gecko)Chrome / 12.0.742.100 Safari / 534.30'
curl_setopt($ curl,CURLOPT_HEADER,0);
curl_setopt($ curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ curl,CURLOPT_FOLLOWLOCATION,0);
curl_setopt($ curl,CURLOPT_POST,1);
curl_setopt($ curl,CURLOPT_POSTFIELDS,$ post);
curl_setopt($ curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ curl,CURLOPT_COOKIEFILE,__DIR __。'/ cookies.txt');
curl_setopt($ curl,CURLOPT_COOKIEJAR,__DIR __。'/ cookies.txt');
$ result = curl_exec($ cur1);
curl_close($ curl);
return $ result;
}

$ login_data ['username'] = $ _POST ['login'];
$ login_data ['password'] = $ _POST ['password'];

foreach($ login_data as $ key => $ value){
$ post_items [] = $ key。'='。
}
$ post_string = implode('&',$ post_items);

if(file_exists(__DIR __。'/ cookies.txt')){
// Cookie存在,指向安全页面?
echo connect('https://yourhost/secure.php')
}
else {
// Cookie不存在发布到登录页面并重定向到安全页面?
connect('https://yourhost/login.php',$ post_string)
$ redirect_url = str_replace('/','',$ _SERVER [PHP_SELF]);
header('Location:'。$ redirect_url);

}


I'm trying to login to https://www.reporo.com/login.php using Curl. Here is code I'm using:

  <?php
function createPostString($aPostFields) {
    foreach ($aPostFields as $key => $value) {
        $aPostFields[$key] = urlencode($key . '=' . $value);
    }

    return urlencode(implode('&', $aPostFields));
}

$postFields['username'] = 'login';
$postFields['password'] = 'pass';
$postFields['submit'] = ' ';

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://www.reporo.com/login.php');
curl_setopt($curl, CURLOPT_REFERER, 'https://www.reporo.com/login.php');
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS,  createPostString($postFields));

curl_exec($curl);
header('Location: https://www.reporo.com/analytics/dashboard.php');
curl_close($curl)


?>

After using script it redirects me to http://best-payroll-services.info/adder/login.php . Where is the problem ?

After var_dump(curl_getinfo($c)) I've got:

'url' => string 'https://www.reporo.com/login.php' (length=32)
  'content_type' => string 'text/html' (length=9)
  'http_code' => int 200
  'header_size' => int 382
  'request_size' => int 192
  'filetime' => int -1
  'ssl_verify_result' => int 20
  'redirect_count' => int 0
  'total_time' => float 0.843
  'namelookup_time' => float 0
  'connect_time' => float 0.109
  'pretransfer_time' => float 0.531
  'size_upload' => float 255
  'size_download' => float 3233
  'speed_download' => float 3835
  'speed_upload' => float 302
  'download_content_length' => float 3233
  'upload_content_length' => float 255
  'starttransfer_time' => float 0.655
  'redirect_time' => float 0
  'certinfo' => 
    array
      empty
  'redirect_url' => string '' (length=0)

Greetings.

解决方案

There are a couple of things that are wrong with this script.

  • You need to change the relative path of cookies:

    if ( file_exists( 'cookies.txt' ) )
    

    to an absolute

    if ( file_exists( dirname( __FILE__ ).'/cookies.txt' ) )
    

    so that you're sure it's checking the right file.

  • Also str_replace( '/', '', $_SERVER[ "PHP_SELF" ] ); is a return function. That means you need to store the returned value:

    $redirect_url = str_replace( '/', '', $_SERVER[ "PHP_SELF" ] );
    header('Location:'.$redirect_url);
    

I've slightly modified your code to this:

function connect( $url, $post = '' )
{
    $curl = curl_init();
    curl_setopt( $curl, CURLOPT_URL, $url );
    curl_setopt( $curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30' );
    curl_setopt( $curl, CURLOPT_HEADER, 0 );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, 0 );
    curl_setopt( $curl, CURLOPT_POST, 1 );
    curl_setopt( $curl, CURLOPT_POSTFIELDS, $post );
    curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );
    curl_setopt( $curl, CURLOPT_COOKIEFILE, __DIR__.'/cookies.txt' );
    curl_setopt( $curl, CURLOPT_COOKIEJAR,  __DIR__.'/cookies.txt' );
    $result = curl_exec( $curl );
    curl_close( $curl );
    return $result;
}

$login_data[ 'username' ] = $_POST['login'];
$login_data[ 'password' ] = $_POST['password'];

foreach ( $login_data as $key => $value ) {
    $post_items[ ] = $key.'='.$value;
}
$post_string = implode( '&', $post_items );

if ( file_exists( __DIR__.'/cookies.txt' ) ) {
    // Cookies exist, point to a secured page?
    echo connect( 'https://yourhost/secure.php')
}
else {
    // Cookies don't exist post to a login page and redirect to a secured page?
    connect( 'https://yourhost/login.php', $post_string )
    $redirect_url = str_replace( '/', '', $_SERVER[ "PHP_SELF" ] );
    header( 'Location: '.$redirect_url );

}

这篇关于Curl https登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆