2017-11-20 1 views
0

파이썬 3을 사용하고 있는데 파이썬 요청을 사용하여 https://competitions.codalab.org/accounts/login/에 로그인해야합니다.파이썬 요청 csrf로 웹 사이트에 로그인

이것은 내 예제 코드입니다.

# -*- coding: utf-8 -*- 
import requests 
url_open = 'https://competitions.codalab.org/accounts/login' 

sess = requests.Session() 
sess.verify = False 

sess.headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
       'Accept-Encoding': 'gzip, deflate, sdch, br', 
       'Accept-Language': 'zh-CN,zh;q=0.8', 
       'Cache-Control': 'max-age=0', 
       'Connection': 'keep-alive', 
       'Host': 'competitions.codalab.org', 
       'Referer': 'https', 
       'Upgrade-Insecure-Requests': '1', 
       'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 ' 
           '(KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} 

page = sess.get(url_open) 
csrfToken = page.cookies['csrftoken'] 
print(csrfToken) 

usrname = *** 
passwd = *** 

form_data = { 
    'csrfmiddlewaretoken': csrfToken, 
    'login': usrname, 
    'password': passwd, 
} 
req = sess.post(url_open, data=form_data, cookies={ 
    'csrftoken': csrfToken 
}) 
print(req.text) 

나는 먼저 csrf를 얻습니다. 그러나이 코드는 codalab에 로그인하지 못했습니다. 누구나 그 이유를 말해 줄 수 있습니까?

답변

1

다음 코드는 내가 처음 CSRF를 얻고, 다음으로 게시 장고 1.9

import requests 


client = requests.session() 
client.get("http://127.0.0.1:8000/admin/login/") 
csrftoken = client.cookies['csrftoken'] 

login_data = {'username':"admin", 
    'password':"pass!", 
    'csrfmiddlewaretoken':csrftoken, 
    'next': '/admin/'} 

r1=client.post("http://127.0.0.1:8000/admin/login/",data=login_data) 

print r1 
<Response [200]> 
+0

와 함께 작동합니다. 하지만 아직도 csrf 오류가 발생했습니다. 이유가 무엇입니까? – chenfei

+0

https://competitions.codalab.org/accounts/login/이 csrf를 게시 할 때 csrf를 변경하지만 웹 사이트에서 js 코드를 찾을 수없는 것으로 나타났습니다. – chenfei

관련 문제