Jump to content
Che

Ajutor: Probleme cu accesarea unui site (python/pycurl(cURL))

Recommended Posts

Salut !

Vreau sa accesez un site care are un tabel. Datele din tabel sunt preluate pe site, de pe un alt server care da un raspuns de tip json cu datele respective.

Tabelul are mai multe pagini si am facut un for care genereaza un url pentru fiecare pagina.

Am vazut headerele si toate redirectionarile si tot si nu se genereaza headere in plus, nu nimic.

Practic eu accesez pagina principala (htm) care imi da un cod pe care trebuie sa-l bag intr-un header. Mai departe, cu headerul respectiv + plus alte headere, accesez un alt server (de care am zis mai sus) si care imi da un raspuns de tip json cu datele din tabel. Pe urma nu mai este nevoie sa accesez iar si iar serverul care imi da pagina html cu codul fiindca tot asa se intampla si live, este doar o data si apoi, cand accesez fiecare pagina a tabelului, nu mi se acceseaza decat serverul (json).

Este totusi o problema cu care nu ma descurc si cu care va rog sa ma ajutati:

Cand accesez serverul (json) prima oara, merge perfect, imi da raspunsul json dorit. Asta pentru prima pagina. Pe urma, cand vreau sa accesez si urmatoarele pagini, primesc aceasta eroare si ma redirectioneaza spre un alt server cu mesaj de eroare:

* Ignoring the response-body
* Connection #0 to host www.situlemeu.com left intact
* Issue another request to this URL: 'https://www.situlemeu.com/404.html?aspxerrorpath=/feed/1/GetSuff
* Found bundle for host www.situlemeu.com: 0x2e12748 [can pipeline]
* Re-using existing connection! (#0) with host www.situlemeu.com
* Connected to www.situlemeu.com (3123.3234.4234.434 #ip pus de mine acum) port 443 (#0)
> GET /404.html?aspxerrorpath=/feed/1/GetStuff HTTP/1.1
Host: www.situlemeu.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.454.96 Safari/453.36 #user agent pus de mine acum
Accept-Encoding: gzip, deflate, sdch, br
Referer: https://www.situlemeu.com/stuff
Cookie: 41234324=sdtfdsgfdfg;
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.8,ro;q=0.6,fr;q=0.4,es;q=0.2
Upgrade-Insecure-Requests: 1
X-Requested-With: XMLHttpRequest
X-DevTools-Emulate-Network-Conditions-Client-Id: 24233d32r-2342d33qf-543223

 

Vad ca zice clar acolo ca exista deja o conexiune catre acel link si ceva de pipeline.

Folosesc pycurl (m-am obisnuit cu el, imi place si nu vreau sa ma schimb pe altceva - mi s-a mai zis, de asta va zic) si m-am gandit eu logic ca ar trebui, dupa "spusele" serverului ca ar trebui sa inchid conexiunea.

Zis si facut:

curl.close()

Si tot nu merge.

Apoi, am cautat sa vad ce e acolo cu eroarea de pipeline. Am gasit asta: http://pycurl.io/docs/latest/curlmultiobject.html

Numai ca nu ma pricep ce trebuie sa fac. Eu i-am adaugat browserului meu facut in pycurl (care e identic cu cURL din PHP) si urmatoarea linie de cod:

m.setopt(pycurl.M_PIPELINING, 1) # bine objectul e denumit altfel dar am luat dupa site

Problema e ca nu merge deloc. Mai tare l-am nenorocit cu linia asta de cod.

Ce trebuie sa fac ?

Mai zic o data ca poate nu ati citit, deci prima oara merge, dar pentru paginile urmatoare primesc acest raspuns de eroare, de mai sus, de fiecare data.

Va rog ajutor !

Multumesc mult !

 

Link to comment
Share on other sites

Ce cod bagi in ce header? S-ar putea ca valoarea respectiva sa fie un token anti-CSRF; desi spui ca la uz normal nu trebuie reinitializat tokenul.

 

In primul rand, as incerca sa recreez pasii in Burp Repeater (sau ceva asemanator) - un tab pentru requestul care iti aduce pagina cu codul, un tab pentru prima pagina, un tab pentru a doua pagina: obtine un cod nou, pune-l in tab-ul al doilea si fa cererea, apoi pune-l in tab-ul al treilea si fa cererea. Daca ambele merg atunci inseamna ca programul tau face ceva anapoda.

 

S-ar putea ca pycurl sa incerce sa faca HTTP Pipelining daca serverul suporta? Documentatia e destul de vaga; am mai gasit ceva aici despre CurlMulti si cum se foloseste: https://fragmentsofcode.wordpress.com/2011/01/22/pycurl-curlmulti-example/. As incerca sa opresc optiunea asta: m.setopt(pycurl.M_PIPELINING, 0).

 

Si, desi ai zis ca iti place pycurl, s-ar putea sa fie overkill in cazul asta. 

 

 

Link to comment
Share on other sites

48 minutes ago, theeternalwanderer said:

In primul rand, as incerca sa recreez pasii in Burp Repeater (sau ceva asemanator) - un tab pentru requestul care iti aduce pagina cu codul, un tab pentru prima pagina, un tab pentru a doua pagina: obtine un cod nou, pune-l in tab-ul al doilea si fa cererea, apoi pune-l in tab-ul al treilea si fa cererea. Daca ambele merg atunci inseamna ca programul tau face ceva anapoda.

 

Cum anume sa fac asta ? Intreb pentru ca nu am folosit niciodata programul de care zici dar nici nu am facut asta vreodata. Un tutorial, te rog ?

Folosesc HTTP Debugger Pro si/sau HTTP Analyzer. Poti face ceea ce spui si cu astea ? Cum ?

Totusi, problema este ca nu este inchisa coneiunea catre serverul care imi da raspunsul json. Cum as putea sa o inchid ? Intreb fiindca aici e de fapt toata problema si daca scriu curl.close() nu se intampla nimic.

Multumesc !

 

@theeternalwanderer Si mai e o chestie pe care am descoperit-o acuma:

Daca incerc sa-i fac debug, totul merge fara nici o problema.

Asa ca i-am bagat un time.sleep(5) si i-am dat run. => Iar da eroare asa cum am descris mai sus. Si daca cresc timpul la 10 secunde tot degeaba. Dar daca ii fac debug totul merge foarte bine. Unde sa fie problema ?

Edited by Che
Link to comment
Share on other sites

Ai aici un tutorial gasit rapid pe YouTube. Burp e un proxy HTTP si Repeater (o componenta din Burp) iti permite sa faci un request si sa ii vezi raspunsul fara sa interactionezi cu un browser de exemplu. Asta iti da libertatea sa testezi chestii de genul, sa interactionezi cu servicii web, sau sa faci debugging can in cazul tau.

 

Cat despre cum sa inchizi conexiunea, nu stiu. Vezi documentatia. De obicei foloses requests pentru HTTP in Python.

 

 

  • Upvote 1
Link to comment
Share on other sites

@theeternalwanderer M-am uitat peste filmulet. Interesant programelul.

Sunt totusi doua probleme: 

1. In varianta demo a programului ai limitari.

2. Situl pe care vreau sa il accesez e super-protejat si pana sa ajungi la el trece printr-un lant de alte servere care te verifica la sange daca esti utilizator real si nu bot/scraper etc. si abia in final te trimite la pagina la care ai nevoie. Nu poti accesa din prima pagina de care zic fiindca iti trebuie niste cookie-uri care sunt de fiecare data altele, unice, dovada ca ai trecut prin lantul de verificari. Din ce am vazut ca se intampla in filmuletul postat de tine eu am inteles ca utilizatorul ia doar un step/o veriga din lantul de care zic si o manipuleaza si programul apoi ii face requestul automat dupa dorintele lui. Intrebarea este: In cazul de care vorbesc, mi-ar executa toate verigile din lant pentru verificari, cele de care zic, sau doar asta de ultima pe care oricum nu o poti accesa fiindca nu ai cookie-urile unice generate de pasii anteriori ? Ce poti face ? Poti seta sa reia de fiecare data tot lantul ? Cum anume ?

 

Multumesc mult !

Link to comment
Share on other sites

  • Active Members
2 hours ago, Che said:

@theeternalwanderer M-am uitat peste filmulet. Interesant programelul.

Sunt totusi doua probleme: 

1. In varianta demo a programului ai limitari.

2. Situl pe care vreau sa il accesez e super-protejat si pana sa ajungi la el trece printr-un lant de alte servere care te verifica la sange daca esti utilizator real si nu bot/scraper etc. si abia in final te trimite la pagina la care ai nevoie. Nu poti accesa din prima pagina de care zic fiindca iti trebuie niste cookie-uri care sunt de fiecare data altele, unice, dovada ca ai trecut prin lantul de verificari. Din ce am vazut ca se intampla in filmuletul postat de tine eu am inteles ca utilizatorul ia doar un step/o veriga din lantul de care zic si o manipuleaza si programul apoi ii face requestul automat dupa dorintele lui. Intrebarea este: In cazul de care vorbesc, mi-ar executa toate verigile din lant pentru verificari, cele de care zic, sau doar asta de ultima pe care oricum nu o poti accesa fiindca nu ai cookie-urile unice generate de pasii anteriori ? Ce poti face ? Poti seta sa reia de fiecare data tot lantul ? Cum anume ?

 

Multumesc mult !

 

Nu cred ca te putem ajuta daca nu arati site-ul ala.

Link to comment
Share on other sites

17 hours ago, theeternalwanderer said:

Burp (versiunea gratuita) poate face ce ai tu nevoie cu Repeater.

 

In plus, cum zice si @dancezar, fara site sau niste exemple concrete de REQUEST/RESPONSE e greu de spus exact ce si cum trebuie facut si unde este problema.

 

Gata, am rezolvat. Era un alt header cu un hash pe care nu il luam in considerare.

Multumesc !

 

Nu pot pune situl sau alte detalii fiindca se pare ca cei care se ocupa de site sunt la curent cu tot si cum apare ceva legat de situl lor (mai exact cineva care vrea sa ia date de pe situl lor folosind scripturi sau diverse alte programe), automat apare o noue versiune a sitului si scripturile/programele nu mai merg.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...