2017-11-10 3 views
1

재미 있기 때문에 파이썬 요청을 사용하여 학교의 학생 포털에 로그온하려고합니다. 이것은 내가 지금까지 생각 해낸 것입니다. 302 (성공한 로그인) 대신 200 개의 상태 코드 (로그인에 실패 할 때 얻을 수있는 코드)를 얻으므로 헤더에 매우 명시 적으로 노력하고 있습니다. 네트워크 요청을 검토하는 크롬을 사용하여요청이있는 사이트에 로그인 할 수 없습니다.

import sys 
import os 
import requests 

def login(username, password): 
    url = '(link)/home.html#sign-in-content' 
    values = { 
     'translator_username' : '', 
     'translator_password' : '', 
     'translator_ldappassword' : '', 
     'returnUrl' : '', 
     'serviceName' : 'PS Parent Portal', 
     'serviceTicket' : '', 
     'pcasServerUrl' : '\/', 
     'credentialType' : 'User Id and Password Credential', 
     'account' : username, 
     'pw' : password, 
     'translatorpw' : password 
    } 

    headers = { 
     'accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 
     'accept-encoding' : 'gzip, deflate, br', 
     'accept-language' : 'en-US,en;q=0.9', 
     'cache-control' : 'max-age=0', 
     'connection' : 'keep-alive', 
     'content-type' : 'application/x-www-form-urlencoded', 
     'host' : '(link)', 
     'origin' : '(link)', 
     'referer' : '(link)guardian/home.html', 
     'upgrade-insecure-requests' : '1' 
    } 

    with requests.Session() as s: 
     p = s.post(url, data=values) 
     if p.status_code == 302: 
      print(p.text) 
     print('Authentication error', p.status_code) 

     r = s.get('(link)guardian/home.html') 
     print(r.text) 

def main(): 
    login('myname', 'mypass') 

if __name__ == '__main__': 
    main() 

, 이러한 헤더의 모든 긴 쿠키 번호, 내용 길이, 및 사용자 에이전트에 추가 '요청 헤더'을 받고있다.

pstoken:(token) 
contextData:(text) 
translator_username: 
translator_password: 
translator_ldappassword: 
returnUrl:(url)guardian/home.html 
serviceName:PS Parent Portal 
serviceTicket: 
pcasServerUrl:\/ 
credentialType:User Id and Password Credential 
account:f 
pw:(id) 
translatorpw: 

내가 헤더/폼 이름이 뭔가를 놓치고 다음과 같이

은? 쿠키에 문제가 있습니까? 내가 p.requests.headers 보면

이 전송됩니다 것입니다 :

{'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36', 'accept-encoding': 'gzip, deflate, br', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'connection': 'keep-alive', 'accept-language': 'en-US,en;q=0.9', 'cache-control': 'max-age=0', 'content-type': 'application/x-www-form-urlencoded', 'host': '(url)', 'origin': '(url)', 'referer': '(url)guardian/home.html', 'upgrade-insecure-requests': '1', 'Content-Length': '263'} 

p.text 나에게 PowerAPI, 요청, 기계화와 테스트 로그인 페이지

의 HTML을 제공합니다, 및 RoboBrowser. 모두 실패합니다.

+0

우리에게 귀하의 요청과 응답의 예를 보내기 코드에서

with requests.Session() as s: p = s.post(url, data=values) if p.status_code == 302: print(p.text) print('Authentication error', p.status_code) r = s.get('(link)guardian/home.html') print(r.text) 

, 당신은 Authentication errorstatus_code을 무시하고, 나는 그것이 적어도이를 좋아한다고 생각 밖으로 인쇄 할 수 있습니다. – Sraw

+0

@Sraw 수정 한 게시물의 하단을 참조하십시오. –

+0

이것이 PowerSchool 로그인 양식에 도움이되는 경우 –

답변

0

어떤 응답을 기대합니까? 응답을 분석하는 데 잘못된 방법을 사용하고 있습니다.

with requests.Session() as s: 
    p = s.post(url, data=values) 
    if p.status_code == 302: 
     print(p.text) 
     r = s.get('(link)guardian/home.html') 
     print(r.text) 
    else: 
     print('Authentication error', p.status_code) 
+0

그럼에도 불구하고 여전히 똑같은 반응을 보였고 코드는 200입니다. –

+0

@Chase 정말로 헤더를 설정 했습니까? 's.post (url, headers = headers, data = values)' – Sraw

+0

예, 설정을 잊어 버렸기 때문에 아무런 차이가 없었습니다. 현재 Robobrowser를 사용하고 있습니다. 코드는 정보가 제출 될 때 오류를 발생시키지 않지만 인증을 통과 한 페이지를 열어 HTML을 가져 오는 경우 여전히 로그인임을 확인할 수 있습니다. –

관련 문제