Curl https登录 [英] Curl https login
问题描述
我要尝试登录 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)
问候。
-
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屋!