Autor | Zpráva | ||
---|---|---|---|
lisak Profil * |
#1 · Zasláno: 19. 4. 2013, 14:41:18
Dobrý den,
něco mi jede normálně a něco se rozjelo, když jsem udělal změnu v CURLOPT_HTTPHEADER. Proto si myslím, že v tom jede právě on a teď moje šibalská otázka: Jak zjistím na stránce, správný zápis pro CURLOPT_HTTPHEADER ? Shválně jsem se ve firefoxu přihlásil a vytáhnul jsem si informace o stránce, ale odpověď proč jako jediná stránka mi nedovoluje získat data jsem nenašel. |
||
Jan Tvrdík Profil |
#2 · Zasláno: 19. 4. 2013, 14:50:18
lisak:
Nechápu otázku. Posíláš přes cURL nějaký HTTP požadavek s vlastními hlavičkami a nevíš, jestli jsou ty hlavičky v pořádku? Podle čeho definuješ správnost těch hlaviček? A co vlastně posíláš za hlavičky? |
||
lisak Profil * |
#3 · Zasláno: 19. 4. 2013, 15:04:59 · Upravil/a: lisak
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6'); curl_setopt($ch, CURLOPT_HTTPHEADER, Array('Content-type: text/html; charset='.$charset,'Authentication-API-Key: 12345')); Chci se jednoduše přihlásit a vytáhnout si nějaká data ze svého profilu. Hledám návody na internetu a testuju. Vypisoval by sem si to rád sám, ale nevím jak zjistím co ta daná stránka chce Už jsem na to přišel, ale vypisuje mi: Bad Request - Invalid Header HTTP Error 400. The request has an invalid header name. curl_setopt($ch, CURLOPT_HTTPHEADER, Array('GET / HTTP/1.0;Host: domena.cz;Connection: close;User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9) Gecko/2008052906 Firefox/3.0;Accept-Encoding: gzip;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8;Accept-Language: cs,en-us;q=0.7,en;q=0.3;Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7;Cache-Control: no-cache')); |
||
lisak Profil * |
#4 · Zasláno: 19. 4. 2013, 22:46:25
U tohodle se mi chybová hláčka o špatně vypsané hlavičce nezobrazí, ale zároveň se mi nezobrazí vůbec nic. Kde dělám chybu?
CURLOPT_HTTPHEADER, Array('Connection: close; User-Agent: Web-sniffer/1.0.44 (+http://web-sniffer.net/); Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8;Accept-Language: cs,en-us;q=0.7,en;q=0.3; Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7;Cache-Control: no-cache')); |
||
Davex Profil |
URL se nastavuje samostatně v inicializaci cURL a metoda se nastavuje jinde. Do
CURLOPT_HTTPHEADER patří jen dodatečné hlavičky, kde je každá jako samostatný prvek v poli. Nemají být v jednom prvku jako řetězec oddělený středníkem.
|
||
lisak Profil * |
#6 · Zasláno: 19. 4. 2013, 23:02:54 · Upravil/a: lisak
Já mám zápis takhle:
$ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.8.1) Gecko/20061010 Firefox/2.0'); curl_setopt($ch, CURLOPT_HTTPHEADER, Array('Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7')); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1024); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $get); $data = curl_exec($ch); curl_close($ch); Bojuji furt s CURLOPT_HTTPHEADER a snažím se mu tam nacpat tu správnou hlavičku. Jen furt nevím co dělám špatně Takhle se mi taky nic nevypisuje, ale myslel jste to takhle? $accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; $content = 'text/html; charset=utf-8'; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.8.1) Gecko/20061010 Firefox/2.0'); curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Accept: ' .$accept, 'Content-type: '.$content)); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1024); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $get); $data = curl_exec($ch); curl_close($ch); Může mi prosím někdo napsat jak se to má správně psát? |
||
lisak Profil * |
#7 · Zasláno: 20. 4. 2013, 00:19:43
Nemusíte se všichni přetrhnout :-) Vždyť já si tu rád píšu sám se sebou :-)
|
||
Jan Tvrdík Profil |
#8 · Zasláno: 20. 4. 2013, 00:50:44
lisak:
Mělo by to být skoro dobře. Akorát vyhoď posílání té Content-type hlavičky, protože pravděpodobně nechceš cílové stránce posílat HTML soubor, ale nějaké parametry. Záleží, co máš v proměnné $get , kterou jsi nám tady neukázal.
|
||
lisak Profil * |
#9 · Zasláno: 20. 4. 2013, 00:55:14 · Upravil/a: lisak
Mám tam: Nick=ja&Pwd=code
bez Content-type to nejde. Provadim prihlaseni a beru si kod. Nebo spis je to mim cilem :-) Jde mi o to se napojit na lide a tam si vzit jen pocet prijatych vzkazu. Uzivatele by pak na me strance videli kolik mam nebo maji vzkazu oni. Vsechno zvládnu, ale potrebuju se přihlásit. Chmod 777 mám samozřejmě nastavený a v minulosti ten samí kod mi fungoval perfektně na jiný stránce. Jen na tyhle mi to nejde. Někde jsem se dočetl, že pokud je správně nastavený CURLOPT_HTTPHEADER tak vše pak jede. Proto se snažím a zaměřuju jen na hlavičky protože vše okolo předpokládám mám dobře |
||
Jan Tvrdík Profil |
lisak:
„bez Content-type to nejde“ Proč? Zkoušel jsi to? Co ti to vlastně teď vrací? |
||
lisak Profil * |
#11 · Zasláno: 20. 4. 2013, 02:09:46
I kdyz to stim fungovalo, tak jsem to zrusil jako nadbitecny prikaz, ale stranka se nezobrazila. Kdyz jsem to vratil, tak se mi zobrazila.
|
||
Jan Tvrdík Profil |
#12 · Zasláno: 20. 4. 2013, 02:22:49
lisak:
Tvůj způsob vyjadřování zdá se mi poněkud nešťastný :) „I kdyz to stim fungovalo“ Co myslíš tím „fungovalo“? Mám dojem, žes říkal, že ti to pořád nefunguje. „ale stranka se nezobrazila“ On ten kód má zobrazovat nějakou stránku? Nebo tím myslíš? Vrací případně něco funkce curl_error? „Kdyz jsem to vratil, tak se mi zobrazila.“ Co se kde zobrazilo? Ten kód rozhodně nic nezobrazuje. |
||
lisak Profil * |
#13 · Zasláno: 20. 4. 2013, 02:26:33
Omlouvám se. Máte pravdu, že se blbě vyjadřuju a to jsem právě taky pochopil. Už to funguje, ale ten volík na místo toho aby mě zobrazil stránku pod mim php, tak mě přihlásí, ale presmeruje na svoji
Místo: domena.cz/script.php Mám: http://lide.cz |
||
Jan Tvrdík Profil |
lisak:
„ten volík“ Nevím kdo nebo co to je. Bez rozpoznání podmětu nejsem schopen danou větu pochopit. Prosím, dej si záležet na tom, ať to, co píšeš, jsou skutečně platné české věty. |
||
lisak Profil * |
#15 · Zasláno: 20. 4. 2013, 02:35:49
Dobře. Má tam danou ochranu refreshem. Tak jsem si vlastně vytvořil věc, která mne bez otravného vyplnování přihlásí, ale ke kodu se nedostanu.
Napadlo mě jedině, že se provede zapis do cookie a ten si potom vytahnout dalšim curl |
||
Jan Tvrdík Profil |
#16 · Zasláno: 20. 4. 2013, 02:45:24
lisak:
„Má tam danou ochranu refreshem.“ Nevím, co si mám představit pod „ochranou refreshem“. To, že po přihlášení (metodou POST) dojde k přesměrování, je očekávané chování. To, že je to přesměrování automaticky následováno, je dáno explicitním nastavením CURLOPT_FOLLOWLOCATION na true .
„Napadlo mě jedině, že se provede zapis do cookie a ten si potom vytahnout dalšim curl“ Uložení přijatých cookies se už provedlo, konkrétně do souboru nastaveného jako CURLOPT_COOKIEFILE . Poslání dalšího požadavku se stejnými cookies je zcela korektní způsob, jak se běžně získávají data, která k přístupu vyžadují přihlášení.
|
||
lisak Profil * |
#17 · Zasláno: 20. 4. 2013, 02:56:08 · Upravil/a: lisak
a jak mám tedy udělat aby to fungovalo jak má? Jý už nic nevim, ale jsem už blízko
Zrušil jsem echo u toho curl a dal jsem mu jeste tohle, ale zobrazi mi stranku bez prihlaseni $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,"http://profil.lide.cz"); curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $data = curl_exec($ch); curl_close($ch); echo $data; Proč to nefunguje? Ten co funguje (zapisuje cookie a prihlasuje) jsem nechal bez spuštění. Vše se provede, ale nejsem nikam presmerovanej. Tak jsem ještě dodal tohle: $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_URL, 'http://www.lide.cz/'); curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); $data = curl_exec($ch); curl_close($ch); echo $data; Do cookie.txt se vse zapise a myslel jsem si, že tímhle se dostanu na stránku jako přihlášený. Zase jsem se spletl a sice se stránka zobrazí, ale nejsem přihlášený i když se vše zapsalo. Kde je prosím chyba? cookie.txt pro uvěření: #HttpOnly_.szn.cz TRUE / FALSE 0 lsds 6|OVQF6USDLMEEIVKKHBRAWRKQKBAQSUYJJIFQWDATBY4GOYYQMN6H24DDMRJQCRAIKFBQCGQFA4VCCPQFKAEBOEAJDBMA6YZ5MFMHIYSTKZHVGWQSLZCXO2IJIFLV4QIMLYAA6RKWLVBF643DNJKGOMZVORRS6VCESICPY4NQ7Y34EGGIPKW5ODJ62ZJMNIFR #HttpOnly_.szn.cz TRUE / FALSE 1397957719 ls seznam:email.cz:0:0 |
||
Micruss Profil |
#18 · Zasláno: 20. 4. 2013, 09:09:52
Zkus se podívat sem
http://micruss.eu/skripty/curl.phps |
||
lisak Profil * |
#19 · Zasláno: 20. 4. 2013, 15:07:59 · Upravil/a: lisak
Micruss:
Děkuju. To taky bohuzel nefunguje. Seznam to bude mít pělně zabezpečený. Tak jsem si řekl, že se procvičím na rande.cz :-) To jsem se dřív pokoušel taky a zjistil jsem, že to je optížný. Proto si myslím, že na učení je ideální. Potřebuju pochopit ty hlavičky. To je podle mě důležitý a tohle když zmáknu, tak ostatní bude jen hra. Hledal jsem vysvětlení pro blbečky, ale žádný jsem nenašel, tak to musím pochopit sám. Nebo je tu někdo kdo mi to vysvětlí? Určitě nebudu jedinej kdo si ten návod rád prostuduje. Třeba taková malá zajímavost, kterou mi hlava nebere: <input name="ctl00$login$login_nick" type="text" id="login_login_nick" class="userPanel_txtNick" onkeypress="pressDefaultButton('login_ctl00', event);" /> Nikde není uveden začátek ani konec form. Proto jestli tohle zdolám, tak jsem připravenej na seznam :-) Nevíte někdo jak je možný, že tam nemá form? |
||
lisak Profil * |
#20 · Zasláno: 20. 4. 2013, 18:17:09 · Upravil/a: lisak
<?php session_start(); $strCookie = 'PHPSESSID='.$_COOKIE['PHPSESSID'].'; path=/'; session_write_close(); //header("Content-type: text/plain"); $contentType = 'text/html'; $method = 'POST'; $header1 = 'Authentication-API-Key: 12345'; $charset= 'UTF-8'; $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0'); curl_setopt($ch, CURLOPT_URL, "http://www.rande.cz/"); curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); //initiates cookie file if needed curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); // Uses cookies from previous session if exist curl_setopt($ch, CURLOPT_COOKIE, $strCookie); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLINFO_HEADER_OUT, true); curl_setopt($ch, CURLOPT_HTTPHEADER, Array('Content-type: '.$contentType.'; charset='.$charset, $header1)); curl_setopt($ch, CURLOPT_POSTFIELDS, "ctl00$login$login_nick=nick&ctl00$login$login_heslo=heslo&ctl00loginctl00=Přihlásit"); $vys = curl_exec($ch); echo $vys; ?> Ví někdo proč to nefunguje? Vím, že jsem říkal, že se na tom naučím, ale pořád v tom bloudím a potřebuju poradit. Na co je diskusní forum o programování, když tu jen někdo hází hlášky o porušování pravidel a nikdo neporadí? Adminům rád vzkazuju, že by sem to řešení dal jako konec vlákna. Jinak všem moc děkuju za super pomoc a hlavně, že jsem se díky této diskusi neco naučil :-) |
||
lisak Profil * |
#21 · Zasláno: 20. 4. 2013, 22:13:30
Vlákno se může ukončit :-)
Vyřešilo se to na jiném foru. |
||
Davex Profil |
#22 · Zasláno: 20. 4. 2013, 23:39:23
|
||
lisak Profil * |
#23 · Zasláno: 21. 4. 2013, 10:26:58 · Upravil/a: lisak
Jeden klučina mi dobře pomohl pochopit proces. Ještě nehotové řešení:
<?php //header("Content-type: text/plain"); $ch = curl_init('https://login.szn.cz/loginProcess'); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0'); curl_setopt($ch, CURLOPT_HTTPHEADER, Array('charset=iso-8859-1')); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_POSTFIELDS, 'username='.$nick.'&domain='.$dome.'&password='.$pasw.'&login=Přihlásit se&serviceId=lide&disableSSL=0&forceSSL=0&lang=cz&loginType=seznam&returnURL=http://profil.lide.cz/'.$nick.'@'.$dome.'/profil/&forceRelogin=0'); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); #curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HEADER, 1); $ziskej = curl_exec($ch); curl_close($ch); preg_match_all("'<a.*?href=\"(http[s]*://[^>\"]*?)\"[^>]*?>(.*?)</a>'si", $ziskej, $matches, PREG_SET_ORDER); foreach($matches as $match){ $url = $match[1]; } // Jsme prihlaseni na seznam a ted pokracujem na lide $ch = curl_init($url); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0'); curl_setopt($ch, CURLOPT_HTTPHEADER, Array('charset=iso-8859-1')); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); #curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HEADER, 1); $ziskej = curl_exec($ch); curl_close($ch); // Jsme prihlaseni (profil) $ch = curl_init('http://profil.lide.cz/'.$nick.'@'.$dome.'/profil/'); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0'); curl_setopt($ch, CURLOPT_HTTPHEADER, Array('charset=iso-8859-1')); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); #curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HEADER, 1); $ziskej = curl_exec($ch); curl_close($ch); echo $ziskej; ?> Jen jsem slíbil, že hotové řešení později doplním. Prozatím mám jen tohle, tak to sem dávam aby byl vidět nějaký postup Jenom dodatek: Při tomhle kodu se provede tento zápis do cookie. lide, které chceme mají špatný zápis pro relaci, tak na týhle opravě ted pracuju. #HttpOnly_.szn.cz TRUE / FALSE 0 lsds 6|OVQF6USCLMAUWVCAHBRAWRKQKFAASUYNJIFQWDATBY4GOYYQMN6H24DDMRJQCRAAKSBQCGQFA4VCCPQFKAEBOEAJDBMA6YZ5MFMHIYSTKZHVGWQSLZCXO2IJIFLV4QIMLYBA6RKWLVBF643DNJKGMMZVO5QS6VCE5XBQSAZSUDCERPKPP3VTUISYWSYTDXFG #HttpOnly_.szn.cz TRUE / FALSE 1398067759 ls seznam:email.cz:0:0 profil.lide.cz FALSE / FALSE 0 last_visited nick@domena.cz!M!!!0!0!0!0!0 To vážně nikdo nechce pomoct? Věřím tomu, že pokud to dokážu, tak kopírovat to bude spousta lidí, ale když jde o pomoc, tak nikdo :-) Typický čecháčkové :-) „Vyřešilo se to na jiném foru.“ A jak? Zajímal Vás kod nebo provedení? Koukám, že tohle fórum je o samomluvě, samořešení a ostatní aby kopírovali. Mám tam menší problémy, které vyřeším, ale řešení neuveřejním už jen proto, že nikdo neměl nejmenší snahu pomoct. Jsou někdy chvilky kdy se stydím, že jsem čech. Všichni plivete na Arabáše, ale nešaháme jim povahově ani pokotníky. |
||
Časová prodleva: 11 let
|
0