2016-12-16 71 views
0

我有一個捲曲問題。我需要從我的個人資料和網站提取數據(帳戶的有效性)。問題是缺乏記錄。通過php/curl登錄時出現問題

$login = "tinware2"; 
$password = "passtest"; 
$ckfile = tempnam("./cookies", "goldvod.txt"); 
$page_login = "http://goldvod.tv/login.html"; 
$page_download = "http://goldvod.tv/profil.html"; 
$post_data = "?login=$login&pass=$password"; 
$agent = "Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3"; 


$headers = array(); 
$headers[] = 'GET /login.html HTTP/1.1'; 
$headers[] = 'Host: goldvod.tv'; 
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'; 
$headers[] = 'Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4'; 
$headers[] = 'Referer: http://goldvod.tv/login.html'; 
$headers[] = 'Upgrade-Insecure-Requests: 1'; 
$headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36'; 


$connect = curl_init(); 


curl_setopt($connect, CURLOPT_URL, $page_login); 
curl_setopt($connect, CURLOPT_COOKIESESSION, 1); 
curl_setopt($connect, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt($connect, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($connect, CURLOPT_TIMEOUT, 40); 
curl_setopt($connect, CURLOPT_RETURNTRANSFER, 1);   
curl_setopt($connect, CURLOPT_HEADER, 0); 
curl_setopt($connect, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($connect, CURLOPT_USERAGENT, $agent); 
curl_setopt($connect, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($connect, CURLOPT_POST, 1); 
curl_setopt($connect, CURLOPT_POSTFIELDS, $post_data); 
curl_exec($connect); 


curl_setopt($connect, CURLOPT_URL, $page_download); 
$page = curl_exec($connect); 


curl_close($connect); 


echo $page; 

該腳本沒有記錄帳號。請幫忙。

+1

不是一個好主意後的憑證......(用戶名/密碼) - 你應該刪除它們...... – urban

+0

你能分享您收到錯誤消息? – mba12

+0

@urban它可能是一個無特權的測試帳戶,沒有安全意義,沒有問題共享 – hanshenrik

回答

0

你在這裏做了一些錯誤,

1:不要手動創建GET /頭,讓捲曲與CURLOPT_URL/CURLOPT_HTTPGET爲您創建

2:登錄不是一個GET操作,它是一個POST操作。

並且缺少對curl返回值的錯誤檢查。

這裏的登錄,打算到個人資料頁的例子,並提取賬戶類型(我猜它說:「免費賬戶」什麼的,但我不說這種語言),使用hhb_curl從https://github.com/divinity76/hhb_.inc.php/blob/master/hhb_.inc.php

<?php 
declare(strict_types=1); 
require_once('hhb_.inc.php'); 
hhb_init(); 
$hc=new hhb_curl(); 
$hc->_setComfortableOptions(); 
//getting a session 
$hc->exec('http://goldvod.tv/login.html'); 

//logging in 
$username='tinware2'; 
$password='passtest'; 
$hc->setopt_array(array(
     CURLOPT_POST=>true, 
     CURLOPT_POSTFIELDS=>http_build_query(array(
       'login'=>$username, 
       'pass'=>$password, 
       'logged'=>''//??    
     )) 
)); 
$hc->exec('http://goldvod.tv/login.html'); 
//TODO: confirm login was successful 
$hc->exec('http://goldvod.tv/profil.html'); 
//extract "account type" from your profile 
[email protected]::loadHTML($hc->getResponseBody()); 
$accountType=trim(preg_replace('/\s+/', "\n", $domd->getElementById("content-top-right")->textContent)); 
echo $accountType.PHP_EOL; 

輸出:

Konto: 
Standard 
Ważne 
do: 
Brak 
+0

我在版本5.4中使用PHP在我的樹莓派(與存儲庫)。我有通知: 警告:不支持聲明「strict_types」在hhb_.inc.php第2行 解析錯誤:語法錯誤,意想不到的「:」,希望「{」在第4行hhb_.inc.php 會你推薦我舊功能(沒有類php)? – Tinware

+0

我的問題的結果是添加一個空的變量「記錄」。有用! – Tinware

+0

你也不是URL編碼的用戶名/密碼,所以如果用戶名OR密碼包含空格,或者是'&'或'=',或者其他一些字符,服務器會得到錯誤的密碼,你應該urlencode() (在我的例子中,我使用http_build_query()來爲我進行網址編碼) – hanshenrik