cURL giriş sorunu

3 Cevap php

Güvenli (yani giriş) sayfa kazımak için cURL kullanarak ve sabrımın sonuna geldim. Ben başarıyla az veya hiç sorun ile iki site kazımak için, ve şimdi ben sadece bu bir giriş yapamıyorum başardı. cURL Ben bunu sormak tüm sayfaları alır, ama hepsi yardımcı olmuyor, oturum açmış değiliz. Yani belki birisi ben kaçırdım bir hata nokta olabilir?

Kodu:

$url_to = 'http://fastorder.newrock.es/store2009/index.php/customer/account/loginPost/';
$url_from = 'http://fastorder.newrock.es/store2009/index.php/customer/account/login/';
$url_get = 'http://fastorder.newrock.es/store2009/index.php/';
$name_pass = 'login%5Busername%5D=*****&login%5Bpassword%5D=*****&send=';

function login($link,$user,$from) {
    $fp = fopen("cookie.txt", "w");
    fclose($fp);
    $log = curl_init();
    curl_setopt($log, CURLOPT_REFERER, $from);
    curl_setopt($log, CURLOPT_URL, $link);
    curl_setopt($log, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($log, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($log, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6");
    curl_setopt($log, CURLOPT_TIMEOUT, 40);
    curl_setopt($log, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($log, CURLOPT_HEADER, TRUE);
    curl_setopt($log, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($log, CURLOPT_POST, TRUE);      
    curl_setopt($log, CURLOPT_POSTFIELDS, $user);
    $data = curl_exec($log);
    curl_close($log);
}

login($url_to,$name_pass,$url_from);

function get($url) {
    $get = curl_init();
    curl_setopt($get, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($get, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($get, CURLOPT_URL, $url);
    return curl_exec ($get);
    curl_close ($get);
}

$html = get($url_get);
echo $html;

Bu, diğer iki site üzerinde çalıştı (daha fazla ya da daha az) aynı komut dosyası olduğunu ve ince oturum yönetir. Ne başlangıç ​​beni attı $name_pass olarak kodlardır. Site login[username] olarak adı ve şifre giriş alanları adlandırılmış ve login[password] gelmiştir çıkıyor. Neden için cehennem, hiç bir fikrim yok, ama ben kodları ve destekleri ile hem göndererek denedim ve hiçbir şey yardımcı oldu.

Live HTTP Headers bana sayfa için aşağıdaki veriyor:

http://fastorder.newrock.es/store2009/index.php/customer/account/loginPost/

POST /store2009/index.php/customer/account/loginPost/ HTTP/1.1
Host: fastorder.newrock.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://fastorder.newrock.es/store2009/index.php/customer/account/login/
Cookie: frontend=6tjul97q4mvn0046ier0k79li8
Content-Type: application/x-www-form-urlencoded
Content-Length: 81
login%5Busername%5D=*****&login%5Bpassword%5D=*****&send=
HTTP/1.1 302 Found
Date: Fri, 26 Feb 2010 12:29:19 GMT
Server: Apache/2.0.63 (CentOS)
X-Powered-By: PHP/5.2.10
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://fastorder.newrock.es/store2009/index.php/customer/account/
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8

Ben oturum açmasını engelleme kese Ama şu anda tamamen sıkışmış ve ben ne yapacağım konusunda hiçbir fikrim var bazı karanlık yolu var düşünme, cURL komut için her şeyi kopyalamak için denedim. Ve ben öğreticiler bir çok ile kazdık ettik ve hepsi ilk iki siteler için bir cazibe gibi çalıştı tavsiye vermek.

Halp?

3 Cevap

Bu olabilir:

login%5Busername%5D=*****&login%5Bpassword%5D=*****&send=

Ben hiçbir kıvırmak gurusu değilim, ama script Tamam gibi görünüyor, bu yüzden belki karakterleri kaçmak gerekir.

Ben kıvrılma ve giriş formları ile bu tür yerel testler yapardı. Belki oradan neyin yanlış hata. Eğer haklıysam, boş alanlar olacak.

Öneri: Use Fiddler (www.fiddler2.com) tarayıcınıza vs istek trafik, CURL diff için.

Bu mağazanın kayıt / giriş ile kırık bir şey var. Aktivasyon e-posta sadece hesabını etkinleştirmek için giriş söyledi. Ben birden çok kez günlük denedim ama hata alıyorum "Bu hesap aktif değil." everytime giriş deneyin.

Aşağıda iade giriş sayfasını yazdırır hızlı bir değişimdir.

$url_to = 'http://fastorder.newrock.es/store2009/index.php/customer/account/loginPost/';
$url_from = 'http://fastorder.newrock.es/store2009/index.php/customer/account/login/';
$url_get = 'http://fastorder.newrock.es/store2009/index.php/';
$name_pass = 'login%5Busername%5D=*****&login%5Bpassword%5D=*****&send=';

function login($link,$user,$from) {
$fp = fopen("cookie.txt", "w");
fclose($fp);
$log = curl_init();
curl_setopt($log, CURLOPT_REFERER, $from);
curl_setopt($log, CURLOPT_URL, $link);
curl_setopt($log, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($log, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($log, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6");
curl_setopt($log, CURLOPT_TIMEOUT, 40);
curl_setopt($log, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($log, CURLOPT_HEADER, TRUE);
curl_setopt($log, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($log, CURLOPT_POST, TRUE);      
curl_setopt($log, CURLOPT_POSTFIELDS, $user);
$data = curl_exec($log);
curl_close($log);
return $data;
}

echo login($url_to,$name_pass,$url_from);

function get($url) {
$get = curl_init();
curl_setopt($get, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($get, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($get, CURLOPT_URL, $url);
return curl_exec ($get);
curl_close ($get);
}

$html = get($url_get);
echo $html;

Edit:
Is the cookies data is being written to the cookies file (cookie.txt)? If not...

  1. Dosya izinlerini denetleyin, kendi yazılabilir emin olun.

  2. Php5 önceki sürümlerinde bir hata tanımlama dosya seçeneği göz ardı neden oldu.

Details on the bug are here: http://bugs.php.net/bug.php?id=33475
Solution: Add unset($log) after curl_close($log);

Onun sert w / test edememek o bu komut dosyası hata ayıklama.