簡體   English   中英

Python使用驗證令牌請求GET和POST到網站

[英]Python Requests GET and POST to website with verification token

我正在使用Python 3.3和Requests庫來執行基本的POST請求。

我想模擬一下如果您從以下網頁中將信息手動輸入到瀏覽器中會發生什么: https : //capp.arlingtonva.us/tap/AC_xwTapPay.aspx 例如,嘗試輸入“ 2. Parking Tickets”,單擊下一步,輸入1234作為車牌號,並輸入Virginia作為州,然后單擊“下一步”,然后選中復選框並單擊“下一步”。

盡管URL相同,但是輸入信息並單擊“下一步”會有多次迭代。

當前,我正在url上執行GET以獲得隨機生成的字符串,例如源代碼中“ __EVENTVALIDATION”和“ __VIEWSTATE”的值。 然后,我使用該信息以及其他一些信息進行POST。

我在代碼中使用的是正確的帖子有效載荷嗎?

我的代碼是:

import requests
url = r'https://capp.arlingtonva.us/tap/AC_xwTapPay.aspx'

#GET request
s = requests.Session()
r = s.get(url)
text1 = r.text

#getting "__EVENTVALIDATION" value:
eventvalstartstring = r'id="__EVENTVALIDATION" value="'
eventvalstart = text1.find(eventvalstartstring)+len(eventvalstartstring)
end_ind = text1.find('"',eventvalstart)
eventvalidation_string = text1[eventvalstart:end_ind]

#getting "__VIEWSTATE" value:
viewstate_start_string= 'id="__VIEWSTATE" value="'
viewstate_start = text1.find(viewstate_start_string)+len(viewstate_start_string)
end_ind2 = text1.find('"',viewstate_start)
viewstate_string = text1[viewstate_start:end_ind2]

#POST request
payload = {"AC_xwTapCtl:AC_xwTapCtlCtl.xuWrqCtl:BillType":"PKT",
           "__EVENTTARGET":"",
           "__EVENTARGUMENT":"",
           "__LASTFOCUS":"",
           "__VIEWSTATE":viewstate_string,
           "__VIEWSTATEGENERATOR":"C0C9F6BC",
           "__VIEWSTATEENCRYPTED":"",
           "__EVENTVALIDATION":eventvalidation_string,
           "AC_xwTapCtl:AC_xwTapCtlCtl.xuWrqCtl:TagState":'VA',
           "AC_xwTapCtl:AC_xwTapCtlCtl.xuWrqCtl:TagNumber":'1234',
           "AC_xwTapCtl:AC_xwTapCtlCtl.xuWrqCtl:Next1":"Next >",
           "AC_xwTapCtl:scrollTop":'0',
           "AC_xwTapCtl:AC_xwTapCtlCtl.xuWrqCtl:Next2":"Next >",
           "AC_xwTapCtl:xwTap_txtFocus":"AC_xwTapCtl_AC_xwTapCtlCtl.xuWrqCtl_Next1",
           "AC_xwTapCtl_scrollTop":'0',
           "AC_xwTapCtl:AC_xwTapCtlCtl.xuWrqCtl:Next3":"Next >",
           "AC_xwTapCtl:xwTap_txtFocus":"AC_xwTapCtl_AC_xwTapCtlCtl.xuWrqCtl_Next2",
           "AC_xwTapCtl_scrollTop":"0"}

post = s.post(url, data=payload)
text = post.text

謝謝-K

在這個階段,我可能會切換到使用beautifulsoup(pip install BeautifulSoup4)來解析html,以便更輕松地獲取所有數據。 因為它是.NET(我認為),所以整個頁面只有一種形式,因此我們可以提取所有輸入。

import requests
from bs4 import BeautifulSoup

s = requests.Session()

r = s.get('https://capp.arlingtonva.us/tap/AC_xwTapPay.aspx')
soup = BeautifulSoup(r.text)

# grab out all the fields
payload = {i['name']:i.get('value') for i in soup.findAll('input')}
# populate the select field
payload['AC_xwTapCtl:AC_xwTapCtlCtl.xuWrqCtl:BillType'] = 'PKT'

# and submit the next step
r = s.post('https://capp.arlingtonva.us/tap/AC_xwTapPay.aspx', data=payload)    

# then parse / build next request etc
soup = BeautifulSoup(r.text)
payload = {i['name']:i.get('value') for i in soup.findAll('input')}
payload['AC_xwTapCtl:AC_xwTapCtlCtl.xuWrqCtl:TagState'] = 'VA'
payload['AC_xwTapCtl:AC_xwTapCtlCtl.xuWrqCtl:TagNumber'] = 'blah'
r = s.post('https://capp.arlingtonva.us/tap/AC_xwTapPay.aspx', data=payload)    

# rinse and repeat as many times as required...
soup = BeautifulSoup(r.text)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM