2016-03-13 5 views
1

Я пытаюсь войти в систему на https://www.investagrams.com/login с помощью curl и просто показать пустую страницу. Я новичок в завитке, поэтому, пожалуйста, со мной. Может кто-то любезно указать, в чем проблема в моем коде.https login using curl

<!DOCTYPE html> 
<html> 
<body> 

<?php 

// Create temp file to store cookies 
$ckfile = tempnam ("/tmp", "CURLCOOKIE"); 

// URL to login page 
$url = "https://www.investagrams.com/login"; 

// Get Login page and its cookies and save cookies in the temp file 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($ch); 

$fields = array(
'ctl00$WelcomePageMainContent$ctl00$Username' => '******', 
'ctl00$WelcomePageMainContent$ctl00$Password' => '******', 
); 

$fields_string = ''; 
foreach($fields as $key=>$value) { 
$fields_string .= $key . '=' . $value . '&'; 
} 
rtrim($fields_string, '&'); 

// Post login form and follow redirects 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, count($fields)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
$output = curl_exec($ch); 


$url = "https://www.investagrams.com/Stock/RealTimeMonitoring"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($ch); 

?> 
</body> 
</html> 
+1

Вы первый url, кажется, не хватает '.com' – Terminus

+0

Вам нужно вернуть значение $ output после его второго объявления. –

+0

Я попытался удалить первый $ output и повторить второй $ output, но все равно возвращает пустую страницу @ C.Liddell – Newboy11

ответ

2

Там несколько вещей, которые я заметил неправильно с вашим кодом:

  1. Вы должны вернуть значение вашего второго запроса завитка.
  2. Вам не нужно объявлять DOCTYPE или использовать тег <html> или <body>, если вы используете завиток, чтобы вытащить информацию с веб-сайта, который уже будет обернут в эти теги.
  3. Как @Terminus, упомянутый в комментарии к вашему вопросу, вам нужно включить .com в конце первого URL-адреса.

После этих изменений ваш код должен быть:

<?php 

// Create temp file to store cookies 
$ckfile = tempnam ("/tmp", "CURLCOOKIE"); 

// URL to login page 
$url = "https://www.investagrams.com/login"; 

// Get Login page and its cookies and save cookies in the temp file 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($ch); 

$fields = array(
'ctl00$WelcomePageMainContent$ctl00$Username' => '******', 
'ctl00$WelcomePageMainContent$ctl00$Password' => '******', 
); 

$fields_string = ''; 
foreach($fields as $key=>$value) { 
$fields_string .= $key . '=' . $value . '&'; 
} 
rtrim($fields_string, '&'); 

// Post login form and follow redirects 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, count($fields)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
$output = curl_exec($ch); 

$url = "https://www.investagrams.com/Stock/RealTimeMonitoring"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($ch); 
echo $output; 

?> 

Edit:

Как @tom Изложенные в комментарии ниже, вы не должны использовать curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);, если это абсолютно необходимо, что происходит, это Безразлично 'проверить SSL-сертификат, предоставляемый сервером, позволяющий выполнять олицетворение любого зависания сервера.

Кроме того, поскольку https://investagrams.com имеет действительный сертификат SSL, у вас нет причин для установки CURLOPT_SSL_VERIFYPEER на значение false.

+0

WOW! он работает, спасибо. Ты спасешь меня много времени – Newboy11

+0

@ Newboy11 Рад, что я мог бы помочь. –

+0

@ C.Liddell Вы должны добавить предупреждение о CURLOPT_SSL_VERIFYPEER, так как оно имеет серьезные последствия для безопасности. – Tom