Stranica: 1/2.
[Python] HTTP Post i Get
Postano: 24 sij 2012, 00:47
Postao/la Nele
Poceo sam da pisem program u Pythonu koji ce da se automatski logira na jednu stranicu zatim pokupi i prikaze podatke.
Logiranje prolazi bez problema.
Medjutim problem se javlja kod stranice gdje imam jedan checkbox koji je po defaultu ukljucen i dugme koje generise podatke.
Kada unesem u URL bar tacan url on mi lijepo generise podatke.
I onda kad ja to lijepo slozim u python skriptu i pokrenem javi mi da nisam odabrao podatke u bazi.
Isti taj prokleti url radi kad ga postujem sa Live Http headers pluginom u firefoxu.
Ali kad to python treba da uradi prikazuje mi gresku kao da nisam POSTovao parametar.
Wireshark i ostali uporno prikazuju da je dobro postovan parametar.
Napokon evo i koda:
Kod: Označi sve
#!/usr/bin/python
import urllib, urllib2, cookielib
username = 'nekiUser'
password = 'supertajnalozinka'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'USERNAME' : username, 'PASSWORD' : password})
login1_data=urllib.urlencode({'st_arr[]' : username})
opener.open('http://putanjadostranice', login_data)
opener.open('http://putanjadostranice')
req = urllib2.Request('http://stranicakojunezeliotvoriti')
req.add_header('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
req.add_header('Accept-Language','en-us,en;q=0.5')
req.add_header('Accept-Encoding','gzip, deflate')
req.add_header('Accept-Charset','ISO-8859-1,utf-8;q=0.7,*;q=0.7')
resp2=opener.open(req,login1_data)
print resp2.read()
st_arr[] je parametar koji se salje POST-u i ima izgled st_arr[]=IDlogina
Re: [Python] HTTP Post i Get
Postano: 24 sij 2012, 10:30
Postao/la augur
Postavio si puno headera, ali ne i User-Agent po kojemu sajt vjerojatno vrši razlikovanje klijenata. Za početak postavi ga na isti onaj koji koristi i tvoj Firefox. Ako to ne funkcionira, provjeri točno je li se neki parametri postavljaju i JavaScriptom na samoj stranici.
Re: [Python] HTTP Post i Get
Postano: 24 sij 2012, 11:21
Postao/la pootzko
probaj stvoriti identičan header onome koji šalje browser. to znači sva polja, a ne samo neka. moguće je da ta web stranica ima nekakav web firewall koji skuži kako je tvoj post forgean pa ga odbaci.
Re: [Python] HTTP Post i Get
Postano: 24 sij 2012, 14:16
Postao/la Nele
augur je napisao/la:Postavio si puno headera, ali ne i User-Agent po kojemu sajt vjerojatno vrši razlikovanje klijenata. Za početak postavi ga na isti onaj koji koristi i tvoj Firefox. Ako to ne funkcionira, provjeri točno je li se neki parametri postavljaju i JavaScriptom na samoj stranici.
Postavio sam isti header ali i dalje ne radi. Zar ne bi trebalo biti vidljivo u wiresharku parametar koji postavi javascript?
Meni javlja gresku da parametar nedostaje. Sa wiresharkom kad pregledam parametar je dobro prosljedjen. Eh sad postoji mogucnost da ima jos jedan parametar zbog kojeg mi javlja gresku i dovodi mene do nervnog sloma.
Re: [Python] HTTP Post i Get
Postano: 24 sij 2012, 14:19
Postao/la Nele
pootzko je napisao/la:probaj stvoriti identičan header onome koji šalje browser. to znači sva polja, a ne samo neka. moguće je da ta web stranica ima nekakav web firewall koji skuži kako je tvoj post forgean pa ga odbaci.
Kad stvorim identican header onda mi bez obzira sta ja napisao u skripti polje
Connection: Keep-Alive zamjeni sa Connection: close
Re: [Python] HTTP Post i Get
Postano: 24 sij 2012, 16:04
Postao/la augur
Ne moraš slati sve headere baš. Samo vidi wiresharkom kaj točno firefox šalje sajtu (da, vidjet ćeš i eventualne podatke koje JavaScript generira, headere i ostalo). Je li se cookiji mijenjaju za svaki request? Možda neki podaci expiraju za svaki request? Također, možda su postavljeni i flash cookieji sa skrivenim flash filmićem (njim možda nećeš uhvatit wiresharkom, ako filtriraš po jednoj IP adresi, a flash šalje/requesta na drugu) Također, Live HTTP Headers ti isto ne može do flash podataka ni headera (nije mogao kad sam ja provjeraval to prije par godina). Također možda imaš typo u skripti negdi.. Ak sajt nije tajan daj nam link pa možda netko od nas prokljuvi više..
Re: [Python] HTTP Post i Get
Postano: 24 sij 2012, 19:04
Postao/la Nele
augur je napisao/la:Ne moraš slati sve headere baš. Samo vidi wiresharkom kaj točno firefox šalje sajtu (da, vidjet ćeš i eventualne podatke koje JavaScript generira, headere i ostalo). Je li se cookiji mijenjaju za svaki request? Možda neki podaci expiraju za svaki request? Također, možda su postavljeni i flash cookieji sa skrivenim flash filmićem (njim možda nećeš uhvatit wiresharkom, ako filtriraš po jednoj IP adresi, a flash šalje/requesta na drugu) Također, Live HTTP Headers ti isto ne može do flash podataka ni headera (nije mogao kad sam ja provjeraval to prije par godina). Također možda imaš typo u skripti negdi.. Ak sajt nije tajan daj nam link pa možda netko od nas prokljuvi više..
Nema flasha. Radi se o openSIS-u.
Ovdje ima demo
http://demo.os4ed.com/
Re: [Python] HTTP Post i Get
Postano: 24 sij 2012, 21:54
Postao/la augur
Na brzinu sam pogledao source stranice. Ima jedna zanimljiva linija:
Kod: Označi sve
td><input name='' type='submit' class='login' value='' onMouseDown=Set_Cookie('dhtmlgoodies_tab_menu_tabIndex','',-1) /></td>
Mislim da bi to (a možda i još koja linija) moglo biti ključno..
Re: [Python] HTTP Post i Get
Postano: 24 sij 2012, 22:34
Postao/la Nele
Skripta se uspije logirati i ispisati sadrzaj svih stranica osim stranice koja se nalazi u Grades --> Transcripts.
Dugme Create transcripts for selected students predstavlja problem.
Demo stranica salje i controller='Y' POST-u. Kod moje stranice se to ne salje pa mislim da su je malo modifikovali.
Probao sam slati i controller ali ne uspijeva, Javi mi gresku <SCRIPT language=javascript>history.back();alert("You must choose at least one student and marking period");</SCRIPT>
Ta greska se isto javlja kad izostavim znak & izmedju linka i parametra kada rucno upisujem u firefox.
Pa pretpostavljam da se negdje znak & gubi iako wireshark pokazuje da je sve u redu.
Re: [Python] HTTP Post i Get
Postano: 24 sij 2012, 22:47
Postao/la augur
Unesi svaki '&' kao '&'. To bi moglo riješti problem možda.