Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Consecutive requests with python Requests.Session() not working

I was trying to do this,

import requests
s=requests.Session()
login_data = dict(userName='user', password='pwd')
ra=s.post('http://example/checklogin.php', data=login_data)
print ra.content
print ra.headers
ans = dict(answer='5')
f=s.cookies
r=s.post('http://example/level1.php',data=ans,cookies=f)
print r.content

But the second post request returns a 404 error, can someone help me why ?

like image 325
Mayank Jha Avatar asked Sep 07 '13 21:09

Mayank Jha


People also ask

How do you request a Session in Python?

The Requests Session object allows you to persist specific parameters across requests to the same site. To get the Session object in Python Requests, you need to call the requests. Session() method. The Session object can store such parameters as cookies and HTTP headers.

Does Python requests reuse connection?

Any requests that you make within a session will automatically reuse the appropriate connection! Note that connections are only released back to the pool for reuse once all body data has been read; be sure to either set stream to False or read the content property of the Response object.

Is requests get synchronous Python?

Yes, requests. get is a synchronous operation. It waits for the page contents to be pulled into python as str.


1 Answers

In the latest version of requests, the sessions object comes equipped with Cookie Persistence, look at the requests Sessions ojbects docs. So you don't need add the cookie artificially. Just

import requests
s=requests.Session()
login_data = dict(userName='user', password='pwd')
ra=s.post('http://example/checklogin.php', data=login_data)
print ra.content
print ra.headers
ans = dict(answer='5')
r=s.post('http://example/level1.php',data=ans)
print r.content

Just print the cookie to look up wheather you were logged.

for cookie in s.cookies:
    print (cookie.name, cookie.value)

And is the example site is yours?
If not maybe the site reject the bot/crawler !
And you can change your requests's user-agent as looks likes you are using a browser.


For example:

import requests
s=requests.Session()
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36'
}
login_data = dict(userName='user', password='pwd')
ra=s.post('http://example/checklogin.php', data=login_data, headers=headers)
print ra.content
print ra.headers
ans = dict(answer='5')
r=s.post('http://example/level1.php',data=ans, headers = headers)
print r.content
like image 136
atupal Avatar answered Oct 05 '22 08:10

atupal