我正在嘗試從該站點自動檢索資料。
我的代碼是:
import requests
a_session = requests.Session()
a_session.get('https://www.kmcgov.in/KMCPortal/jsp/KMCBirthRecordSearch.jsp')
session_cookies = a_session.cookies
cookie = session_cookies.get_dict()
ablu = {
'FatherName': 'Cha',
'dateofBirth': '19/08/2004',
'MotherName': 'Cha',
}
referer = 'https://www.kmcgov.in/KMCPortal/jsp/KMCBirthRecordSearch.jsp'
url = 'https://www.kmcgov.in/KMCPortal/KMCBirthRegistrationAction.do?var=getVal'
r = requests.post(url, cookies=cookie, headers={"referer": referer}, data=ablu)
print(r.text)
命令列輸出 {failure:true,ERRORKEY:{"ERRORMESSAGE":"Please Contact your system administrator"}}
我想知道我做錯了什么。這是我第一次嘗試自動發送表單資料。
更新 1:
import requests
a_session = requests.Session()
a_session.get('https://www.kmcgov.in/KMCPortal/jsp/KMCBirthRecordSearch.jsp')
session_cookies = a_session.cookies
cookie = session_cookies.get_dict()
ablu = {
'FatherName': 'Cha',
'dateofBirth': '19/08/2004',
'MotherName': 'Cha',
}
referer = 'https://www.kmcgov.in/KMCPortal/jsp/KMCBirthRecordSearch.jsp'
url = 'https://www.kmcgov.in/KMCPortal/KMCBirthRegistrationAction.do?var=getVal'
r = a_session.post(url, cookies=cookie, headers={"Referer": referer, "Accept": '*/*',
"Accept-Encoding": 'gzip, deflate, br',
"Accept-Language": 'en-US,en;q=0.9,bn;q=0.8',
"Connection": 'keep-alive',
"Content-Length": '56',
"Content-Type": 'application/x-www-form-urlencoded; charset=UTF-8',
"DNT": '1',
"Host": 'www.kmcgov.in',
"Origin": 'https://www.kmcgov.in',
"sec-ch-ua": '"Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"',
"sec-ch-ua-mobile": '?0',
"sec-ch-ua-platform": '"Windows"',
"Sec-Fetch-Dest": 'empty',
"Sec-Fetch-Mode": 'cors',
"Sec-Fetch-Site": 'same-origin',
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
"X-Requested-With": 'XMLHttpRequest'}, data=ablu)
print(r.text)
uj5u.com熱心網友回復:
檢查此代碼,它對我有用,也許您不必要地提供cookies給requests.post(...):
import requests
url = 'https://www.kmcgov.in/KMCPortal/KMCBirthRegistrationAction.do?var=getVal'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0",
"Accept": "*/*",
"Accept-Language": "pl,en-US;q=0.7,en;q=0.3",
"X-Requested-With": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin"
}
payload = {
'FatherName': 'CHA',
'dateOfBirth': '19/08/2004',
'MotherName': 'CHA'
}
response = requests.post(url, headers=headers, data=payload)
print(response.text)
編輯:
好的,它有時有效,有時無效。
uj5u.com熱心網友回復:
這是一個作業示例。
首先,請注意我們使用的是session,因此會自動為您收集 cookie。無需手動處理它們。
此外,我們可以根據具體情況在提出請求時發送額外的標頭,但會話標頭也包含在內并與您的請求合并。請參見此處:Python 請求 - 高級用法。
在這種情況下,甚至不需要首先發出 get 請求來訪問頁面。您可以立即發送您的 POST 請求,它會起作用并且會回傳類似 JSON 的資料。
我認為這里的關鍵是引數dateOfBirth。原始代碼中的大小寫不一樣。這一定是您的請求在服務器端失敗的原因。
另請注意,一些標題如:
- 內容型別:應用程式/x-www-form-urlencoded
- 內容長度:56
將根據需要由請求模塊自動填充。
import requests
a_session = requests.Session()
a_session.headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:93.0) Gecko/20100101 Firefox/93.0",
"Accept": "*/*",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate",
"DNT": "1",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1"
}
# r = a_session.get('https://www.kmcgov.in/KMCPortal/jsp/KMCBirthRecordSearch.jsp')
# print(r.status_code)
ablu = {
'FatherName': 'CHA',
'dateOfBirth': '19/08/2004',
'MotherName': 'CHA'
}
# additional headers
headers = {
"X-Requested-With": "XMLHttpRequest",
"Origin": "https://www.kmcgov.in",
"Referer": 'https://www.kmcgov.in/KMCPortal/jsp/KMCBirthRecordSearch.jsp',
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin"
}
url = 'https://www.kmcgov.in/KMCPortal/KMCBirthRegistrationAction.do?var=getVal'
r = a_session.post(url, headers=headers, data=ablu)
print(r.text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/349828.html
