2016-09-26 2 views
1

요청 라이브러리를 사용하여 웹 사이트에 로그인하기 위해 python 스크립트를 작성하려고합니다. 이것은 로그인 양식입니다.파이썬 요청을 사용하여 웹 사이트에 로그인 할 때 400을 반환합니다.

<form action="/login" method="POST"><input type="hidden" name="post_key" value="b762c617d52cf987fdb40d74c6a04e07"><input type="hidden" name="return_to" value="http://www.pixiv.net/"><input type="hidden" name="lang" value="en"><input type="hidden" name="source" value="pc"><div class="input-field-group"><div class="input-field"><input type="text" name="pixiv_id" placeholder="E-mail address/pixiv ID" autocapitalize="off"></div><div class="input-field"><input type="password" name="password" placeholder="Password" autocapitalize="off"> 

이것은 내 코드입니다.

import requests 

url = "https://accounts.pixiv.net/login" 

# set requests headers 
headers = { 
'Connection':'keep-alive', 
'User-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36', 
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8' 
} 

# get user id and password 
pixiv_id = raw_input("Your pixiv id : ") 
password = raw_input("Your pixiv password: ") 

payload = { 
    'action' : '/login', 
    'return_to' : 'http://www.pixiv.net' 
} 
payload['pixiv_id']=pixiv_id 
payload['password']=password 


with requests.Session() as s: 
    r = s.post(url, data=payload, headers=headers) 
    response = s.get("http://www.pixiv.net") 
    print r.status_code 
    print response.text 

제 질문은 양식의 모든 숨겨진 값을 채워야합니까? 또한 여러 번 실행했지만 항상 400을 반환합니다. 누군가 내 코드 문제를 파악하는 데 도움이 될 수 있습니까?

답변

1

나는 로그인하고 내가 훨씬 더 POST 요청 매개 변수가 "로그인"을 클릭 한 후 전송되는 참조 브라우저 개발자 도구로 볼 때 :

enter image description here

requests 보낼 것입니다 만 명시 적으로 보내도록에게 무엇을 - 숨겨진 양식 매개 변수도 모두 보내야합니다. HTML 구문 분석과 관련 될 수 있습니다. 예를 들어 BeautifulSoup을 사용할 수 있습니다.

또는 mechanize, mechanicalsoup 또는 robobrowser과 같은 도구를 사용하여 양식의 숨겨진 속성을 자동으로 검색하고 보낼 수 있습니다.

관련 문제