[Python] HTTP Post i Get

C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Nele
Postovi: 248
Pridružen/a: 07 lip 2009, 12:55
Spol: M

[Python] HTTP Post i Get

Post 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
Avatar
augur
Postovi: 60
Pridružen/a: 04 lip 2009, 10:53
Spol: M
OS: Slackware

Re: [Python] HTTP Post i Get

Post 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.
Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk, agh burzum-ishi krimpatul.
Avatar
pootzko
Postovi: 816
Pridružen/a: 13 lis 2008, 21:15
Spol: M
OS: Arch GNU/Linux + KDE
Lokacija: Nerdvana
Kontakt:

Re: [Python] HTTP Post i Get

Post 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.
...I put on my robe and a wizard hat...
Nele
Postovi: 248
Pridružen/a: 07 lip 2009, 12:55
Spol: M

Re: [Python] HTTP Post i Get

Post 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.
Zadnja izmjena: Nele, dana/u 24 sij 2012, 14:22, ukupno mijenjano 1 put.
Nele
Postovi: 248
Pridružen/a: 07 lip 2009, 12:55
Spol: M

Re: [Python] HTTP Post i Get

Post 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
Avatar
augur
Postovi: 60
Pridružen/a: 04 lip 2009, 10:53
Spol: M
OS: Slackware

Re: [Python] HTTP Post i Get

Post 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..
Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk, agh burzum-ishi krimpatul.
Nele
Postovi: 248
Pridružen/a: 07 lip 2009, 12:55
Spol: M

Re: [Python] HTTP Post i Get

Post 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/
Avatar
augur
Postovi: 60
Pridružen/a: 04 lip 2009, 10:53
Spol: M
OS: Slackware

Re: [Python] HTTP Post i Get

Post 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..
Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk, agh burzum-ishi krimpatul.
Nele
Postovi: 248
Pridružen/a: 07 lip 2009, 12:55
Spol: M

Re: [Python] HTTP Post i Get

Post 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.
Avatar
augur
Postovi: 60
Pridružen/a: 04 lip 2009, 10:53
Spol: M
OS: Slackware

Re: [Python] HTTP Post i Get

Post Postao/la augur »

Unesi svaki '&' kao '&'. To bi moglo riješti problem možda.
Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk, agh burzum-ishi krimpatul.
Odgovori