2013-09-07 2 views
3

작동하지에 요청연속 파이썬 Requests.Session() 나는이 일을하려고했다

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 

그러나 두 번째 포스트 요청이 404 오류를 반환, 누군가가 나를 도울 이유를 할 수 있습니까?

+1

이 페이지를 찾을 수 없습니다. URL을 확인하십시오 – Paco

+0

두 번째 요청 만 실행하면 모든 것이 정상적으로 작동합니까? – zero323

+0

URL이 맞습니다. @ zero323 두 번째 요청은 성공적으로 로그인 한 사용자 만 사용할 수 있습니다. –

답변

5

requests의 최신 버전에서 세션 개체는 Cookie Persistence이고 세션 요청은 docs입니다.
쿠키를 인위적으로 추가 할 필요가 없습니다. 그냥

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 

그냥 당신이 기록 된 wheather를 조회하기 위해 쿠키를 인쇄 할 수 있습니다.

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

그리고 너의 예제 사이트입니다?
아마도 사이트가 봇/크롤러를 거부합니다!
그리고 요청자의 사용자 에이전트를 브라우저를 사용하는 것처럼 보이게 변경할 수 있습니다. 예를 들어


:

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 

행운을 빌어 요 ~

+0

사용자 에이전트 헤더를 추가해도 로그인 된 쿠키가 포함 된 헤더가 대체되지 않습니까? 이 작업을 수행 할 때 페이지가 표시되지만 로그인하지 않았습니다 ... –

관련 문제