簡體   English   中英

使用Requests Python庫形成討厭的POST請求

[英]Forming a nasty POST request using Requests Python library

我正在研究一個Python腳本,該腳本可自動幫助我在學校的添加類網絡界面中添加類。 到目前為止,我已經可以通過網站驗證並訪問此add-a-class頁面的HTML。 該界面的工作方式如下:

在此處輸入圖片說明

Status下的項目表示我目前正在上這學期的課程。

在“添加類工作表”下,您有幾個輸入的5位數字,稱為CRN34688 您一次可以輸入10個CRN。

我當時想我可以簡單地用我有興趣添加的CRN查詢URL。 以為這很簡單,我打開了devtools,結果發現POST完全是一團糟。

這是當我嘗試在“添加類工作表”中添加類時從Chrome開發工具下查詢的URL獲取的原始表單數據

term_in=201535&RSTS_IN=DUMMY&assoc_term_in=DUMMY&CRN_IN=DUMMY&start_date_in=DUMMY&end_date_in=DUMMY&SUBJ=DUMMY&CRSE=DUMMY&SEC=DUMMY&LEVL=DUMMY&CRED=DUMMY&GMOD=DUMMY&TITLE=DUMMY&MESG=DUMMY&REG_BTN=DUMMY&MESG=DUMMY&RSTS_IN=&assoc_term_in=201535&CRN_IN=34688&start_date_in=03%2F28%2F2016&end_date_in=06%2F11%2F2016&SUBJ=ECEC&CRSE=451&SEC=001&LEVL=Undergraduate+Quarter&CRED=++++3.000&GMOD=Standard+Letter&TITLE=Computer+Arithmetic&MESG=DUMMY&RSTS_IN=&assoc_term_in=201535&CRN_IN=31109&start_date_in=03%2F28%2F2016&end_date_in=06%2F11%2F2016&SUBJ=BIO&CRSE=141&SEC=073&LEVL=Undergraduate+Quarter&CRED=++++0.000&GMOD=Non+Gradeable+Unit&TITLE=Essential+Biology&MESG=DUMMY&RSTS_IN=&assoc_term_in=201535&CRN_IN=31099&start_date_in=03%2F28%2F2016&end_date_in=06%2F11%2F2016&SUBJ=BIO&CRSE=141&SEC=B&LEVL=Undergraduate+Quarter&CRED=++++4.500&GMOD=Standard+Letter&TITLE=Essential+Biology&MESG=DUMMY&RSTS_IN=&assoc_term_in=201535&CRN_IN=30091&start_date_in=03%2F28%2F2016&end_date_in=06%2F11%2F2016&SUBJ=ECE&CRSE=493&SEC=001&LEVL=Undergraduate+Quarter&CRED=++++4.000&GMOD=Standard+Letter&TITLE=Senior+Design+Project+III&MESG=DUMMY&RSTS_IN=&assoc_term_in=201535&CRN_IN=31117&start_date_in=03%2F28%2F2016&end_date_in=06%2F11%2F2016&SUBJ=BIO&CRSE=141&SEC=001&LEVL=Undergraduate+Quarter&CRED=++++0.000&GMOD=Non+Gradeable+Unit&TITLE=Essential+Biology&MESG=DUMMY&RSTS_IN=&assoc_term_in=201535&CRN_IN=31525&start_date_in=03%2F28%2F2016&end_date_in=06%2F11%2F2016&SUBJ=BIO&CRSE=141&SEC=072&LEVL=Undergraduate+Quarter&CRED=++++0.000&GMOD=Non+Gradeable+Unit&TITLE=Essential+Biology&MESG=DUMMY&RSTS_IN=&assoc_term_in=201535&CRN_IN=30013&start_date_in=03%2F28%2F2016&end_date_in=06%2F11%2F2016&SUBJ=EXAM&CRSE=080&SEC=001&LEVL=Undergraduate+Quarter&CRED=++++0.000&GMOD=Non+Gradeable+Unit&TITLE=Common+Exam+Period+-+I&MESG=DUMMY&RSTS_IN=&assoc_term_in=201535&CRN_IN=34039&start_date_in=03%2F28%2F2016&end_date_in=06%2F11%2F2016&SUBJ=ENTP&CRSE=205&SEC=001&LEVL=Undergraduate+Quarter&CRED=++++3.000&GMOD=Standard+Letter&TITLE=Ready%2C+Set%2C+Fail&RSTS_IN=WR&CRN_IN=34889&assoc_term_in=&start_date_in=&end_date_in=&RSTS_IN=WR&CRN_IN=&assoc_term_in=&start_date_in=&end_date_in=&RSTS_IN=WR&CRN_IN=&assoc_term_in=&start_date_in=&end_date_in=&RSTS_IN=WR&CRN_IN=&assoc_term_in=&start_date_in=&end_date_in=&RSTS_IN=WR&CRN_IN=&assoc_term_in=&start_date_in=&end_date_in=&RSTS_IN=WR&CRN_IN=&assoc_term_in=&start_date_in=&end_date_in=&RSTS_IN=WR&CRN_IN=&assoc_term_in=&start_date_in=&end_date_in=&RSTS_IN=WR&CRN_IN=&assoc_term_in=&start_date_in=&end_date_in=&RSTS_IN=WR&CRN_IN=&assoc_term_in=&start_date_in=&end_date_in=&RSTS_IN=WR&CRN_IN=&assoc_term_in=&start_date_in=&end_date_in=&regs_row=8&wait_row=0&add_row=10&REG_BTN=Submit+Changes

從外觀上看,它似乎在請求中,您不僅添加了要添加的 CRN,到目前為止添加的類成為了新請求的一部分。

深入研究請求,似乎每個類,無論它已經是您計划中當前擁有的類,還是正在通過文本框添加的類,都遵循以下格式:

assoc_term_in=201535
CRN_IN=34688
start_date_in=03%2F28%2F2016
end_date_in=06%2F11%2F2016
SUBJ=ECEC
CRSE=451
SEC=001
LEVL=Undergraduate+Quarter
CRED=++++3.000
GMOD=Standard+Letter
TITLE=Computer+Arithmetic
MESG=DUMMY
RSTS_IN=

每個類具有13個關聯的查詢鍵和值。 我實際上不確定是否需要重新提交您已經添加的類,並且我願意在必要時執行一些測試。

該請求本身是一個POST:

Request URL:https://school.edu/pls/duprod/bwckcoms.P_Regs 
Request Method:POST 
Status Code:200 OK 
Remote Address:[some IP address]

我的問題是:

  1. 我是否可以將CRN直接提交到文本框,而不必重新設置討厭的POST請求? (即某些這樣做的Python庫)。 似乎可以選擇“機械化”,但是可以將“請求”與“機械化”一起使用嗎? 我寧願不重寫進入該表單頁面所需的所有身份驗證。

  2. 如果上述選項不可行,那么有什么想法可以有效地重新構成POST請求?

您可以做的一件事是使用dict來保存每個Requests文檔中有關過帳請求的所有信息。 例如,您的代碼可能如下所示:

import json
import requests

payload = {
  "assoc_term_in":"201535",
  "CRN_IN":"34688",
  "start_date_in":"03%2F28%2F2016",
  "end_date_in":"06%2F11%2F2016",
  "SUBJ":"ECEC",
  "CRSE":"451",
  "SEC":"001",
  "LEVL":"Undergraduate+Quarter",
  "CRED":"++++3.000",
  "GMOD":"Standard+Letter",
  "TITLE":"Computer+Arithmetic",
  "MESG":"DUMMY",
  "RSTS_IN":""
}

r = requests.post("https://school.edu/pls/duprod/bwckcoms.P_Regs", data=json.dumps(payload))
print(r.text)

然后,您可以像使用普通詞典一樣更改所需的任何值。 如果您想使用#1,您的選擇之一就是研究Selenium之類的東西,但是,我個人認為,如果您已經知道POST請求看起來像做上面的事情,則可能會更容易。

暫無
暫無

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

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