GET请求用python得到错误响应

2024-09-30 06:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在website上执行请求 在输入框“\u regidTextBox”中,你可以输入一个ID,这样它就可以选择一个游泳者。 我看到,POST请求执行302,GET请求的值为swimerId=123456(例如)

现在我想用Python来做这个,所以我不需要手动填充表单。 我的代码如下所示:

import requests
from bs4 import BeautifulSoup as soup
import urllib.request
import urllib.parse
from urllib.error import HTTPError

my_url = "http://dsvdaten.de/Modules/Results/Individual.aspx"
dsvID = "283621"
my_url_get = "http://dsvdaten.de/Modules/Results/Individual1.aspx?SwimmerID=" + dsvID
dsvDic = {"SwimmerID": dsvID}
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip,deflate',
'Accept-Language': 'de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7',
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'Host': 'dsvdaten.de',
'Referer': 'http://dsvdaten.de/Modules/Results/Individual.aspx?Lang=de-DE',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}

def get_data(url):
    payload = {"__VIEWSTATE": "", "__VIEWSTATEGENERATOR": "", "__EVENTVALIDATION": "", "SwimmerID": "283621"}
    try:
        session_req = urllib.request.urlopen(url, timeout=10)
        page_html = session_req.read()
    except ConnectionError as ConErr:
        print("Es ist ein Fehler aufgetreten!")
        print(ConErr)
    page_soup = soup(page_html, "html.parser")
    viewstate = page_soup.find("input", {"id": "__VIEWSTATE"}).get("value")
    payload["__VIEWSTATE"] = viewstate
    viewstategenerator = page_soup.find("input", {"id": "__VIEWSTATEGENERATOR"}).get("value")
    payload["__VIEWSTATEGENERATOR"] = viewstategenerator
    eventvalidation = page_soup.find("input", {"id": "__EVENTVALIDATION"}).get("value")
    payload["__EVENTVALIDATION"] = eventvalidation
    return payload


def get_open_url(my_url, dsvDic, headers):  # GET Methode
    encodedFields = urllib.parse.urlencode(dsvDic).encode("utf-8")
    req = urllib.request.Request(url=my_url, data=encodedFields, headers=headers)
    try:
        conn = urllib.request.urlopen(req)
        resp = conn.read()
        print(resp)
        conn.close()
        return resp
    except HTTPError as e:
        error = e.read()


payload = get_data(my_url)
dsvDic.update(payload)
get_open_url(my_url_get, dsvDic, headers)

我确实得到了响应(http200),但不是正确的游泳者(看起来像不活跃的游泳者,idk)。如果我在浏览器(F-12)中操作请求,我会得到相同的结果

如果有人会给一个提示,链接或改进代码,将是很好的tho


Tags: importurlgetrequestmyhtmlpagede

热门问题