2014-12-15 8 views
2

파이썬 3.3 및 요청 라이브러리를 사용하여 기본 POST 요청을하고 있습니다.Python 인증 토큰을 사용하여 웹 사이트에 POST를 요청합니다.

웹 페이지에서 브라우저에 수동으로 정보를 입력하면 어떻게 될지 시뮬레이션하고 싶습니다. https://www.dspayments.com/FAIRFAX. 예를 들어, 해당 URL에 번호판에 "x"를 입력하고 주로서 버지니아를 입력하십시오. 그런 다음 URL이 https://www.dspayments.com/FAIRFAX/Home/PayOption으로 변경되고 원하는 정보가 표시됩니다 (이 두 번째 웹 페이지의 소스 코드가 중요합니다).

위의 두 URL의 소스 코드를 살펴 보았습니다. 첫 번째 url의 텍스트 상자에있는 "inspect element"를 수행하여 게시 요청에 포함되어야하는 몇 가지 사항을 발견했습니다 : { 'Plate': "x", "PlateStateProv": "VA", "submit": "Search "}. 게시물의 내 ​​페이로드 사전의 키와 값으로 위의 HTML에서 값 쌍 :

<form action="/FAIRFAX/Home/PayOption" method="post"><input name="__RequestVerificationToken" type="hidden" value="6OBKbiFcSa6tCqU8k75uf00m_byjxANUbacPXgK2evexESNDz_1cwkUpVVePA2czBLYgKvdEK-Oqk4WuyREi9advmDAEkcC2JvfG2VaVBWkvF3O48k74RXqx7IzwWqSB5PzIJ83P7C5EpTE1CwuWM9MGR2mTVMWyFfpzLnDfFpM1" /><div class="validation-summary-valid" data-valmsg-summary="true"> 

내가 그 이름을 사용 :

그런 다음 (/ PayOption로 끝나는) 두 번째 웹 사이트는 원시 HTML을했다 의뢰. 문제는 두 번째 url에는 매번 임의로 생성 된 값을 가진 것처럼 보이는 "__RequestVerificationToken"이 있다는 것입니다.

어떻게이 웹 사이트에 제대로 게시 할 수 있습니까? "올바른"대답은 플레이트 번호로 "x"를 입력하고 주 URL로 버지니아를 입력하고 첫 번째 URL에서 제출을 클릭하는 것처럼 "/ PayOption"으로 끝나는 웹 사이트에서 동일한 소스 코드를 생성하는 것입니다.

내 코드는 다음과 같습니다

import requests 

url1 = r'https://www.dspayments.com/FAIRFAX' 
url2 = r'https://www.dspayments.com/FAIRFAX/Home/PayOption' 

s = requests.Session() 

#GET request 
r = s.get(url1) 
text1 = r.text 
startstr = '<input name="__RequestVerificationToken" type="hidden" value="' 
start_ind = text1.find(startstr)+len(startstr) 
end_ind = text1.find('"',start_ind) 
auth_string = text1[start_ind:end_ind] 


#POST request 
payload = {'Plate':'x', 'PlateStateProv':'VA',"submit":"Search", 
      "__RequestVerificationToken":auth_string,"validation-summary-valid":"true"} 

post = s.post(url2, headers=user_agent, data=payload) 
source_code = post.text 

감사 -K.

답변

1

첫 페이지의 데이터 만 필요하며 말할 때마다 요청마다 __RequestVerificationToken이 변경됩니다.

당신은 같은 것을해야 할 것이다 :

  • GET 요청

  • https://www.dspayments.com/FAIRFAX에 수확 __RequestVerificationToken 값을 사용하여

  • POST (세션이, 관련 쿠키 처리됩니다 요청) GET 요청에서 스크랩 한 데이터

  • 추출 wha 두 번째 페이지에서 필요한 정보를 얻으십시오.

그래서 첫 번째 페이지와 정확히 같은 양식을 만드는 데 중점을 둡니다. 찌르다가 아직도 어려움을 겪고 있다면 그 세부 사항을 파헤치는 데 도움이 될 수 있습니다.

+0

제안 해 주셔서 감사합니다. 좋은 생각 인 것 같습니다. 귀하의 조언에 따라 업데이트 된 코드를 갖기 위해 내 게시물을 편집했습니다. 아직 기대할 소스 코드를 얻지 못하고 반환 된 POST 요청 source_code에서 "비활성으로 인해 세션 시간이 초과되었습니다"라는 메시지가 나타납니다. 내가해야 할 일이 뭔가 더 있니? – kallandoppler

+0

URL 변경 내용을 무시하고 싶습니다. 중요한 URL은 첫 번째 페이지의 양식이 POST (https://www.dspayments.com/FAIRFAX)로 POST됩니다. 'post = s.post (url1, data = payload)'로 변경하면 나를 위해 일했습니다. (나는 user_agent를 제공하는 것을 괴롭히지 않았습니다). –

+0

이 긁적 거리기와 트릭은 웹 브라우저의 관점에서 그것을 상상하는 것입니다.각 단계마다 html/쿠키가 전송됩니다. 어떤 양식이 페이지에 있습니까? 제출할 수있는 항목은 무엇입니까? 실제 사용자 인 척하는 행동을 시뮬레이트해야합니다. –