[英]Curl https login
我正在嘗試使用Curl登錄到https://www.reporo.com/login.php 。 這是我正在使用的代碼:
<?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)
問候。
此腳本有幾處錯誤。
您需要更改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, 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 );
}
我假設重定向到的網站屬於您,因為該代碼中唯一可以重定向的行是以下行:
header( 'Location: '.$_SERVER[ "PHP_SELF" ] );
我猜問題出在:
if ( file_exists( 'cookies.txt' ) )
該文件似乎不存在,因此正在運行:
connect( 'https://www.reporo.com/login.php', $post_string );
str_replace( '/', '', $_SERVER[ "PHP_SELF" ] );
header( 'Location: '.$_SERVER[ "PHP_SELF" ] );
這是我編寫的腳本,用於登錄Reporo網站並下載特定日期(在url中指定)的總體廣告客戶統計信息。 我很確定這是您要尋找的。
// Login & download stats in CSV format
function get_stats($login_url, $username, $password, $login_button, $csv_title, $download_url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $login_url);
$post_fields = 'username='.urlencode($username).'&password='.urlencode($password);
// Some sites don't send this variable, hence the check
if(trim(urlencode($login_button)) != ''){
$post_fields .= '&'.$login_button.'='.$login_button;
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
curl_exec($ch);
// Prevent the script from timing out
set_time_limit(0);
$fp = fopen (dirname(__FILE__) . '/'.$csv_title, 'w+');//This is the file where we save the information
curl_setopt($ch, CURLOPT_URL, $download_url);//Here is the file we are downloading
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);
}
// Set REPORO variables
$rep__login_url = 'https://www.reporo.com/login.php';
$rep_un = 'USERNAME';
$rep_pw = 'PASSWORD';
$rep_login_butt = 'submit';
$rep_csv = 'reporo_stats.csv';
// In the url, list= YOUR CAMPAIGN IDS (comma seperated)
$rep_dl_url = 'https://www.reporo.com/analytics/data.php?type=AdvertiserEntity&start=2012-10-17&end=2012-10-17&entity=client&list=1234,5678,9101,1121,3141&format=csv';
// Call get_stats function
get_stats($rep__login_url, $rep_un, $rep_pw, $rep_login_butt, $rep_csv, $rep_dl_url);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.