gpt4 book ai didi

python 请求 POST cookie session

转载 作者:行者123 更新时间:2023-11-28 21:20:08 26 4
gpt4 key购买 nike

亲们, 尝试学习 python 的 requests 模块......以及一个简单的项目来提取任何未决的 parking 罚单。

这是在 GETPOST 请求之间保存 session 和 cookie 的正确方法吗?

#!/usr/bin/env python

import requests
import urllib

session = requests.Session()

tokenRequest = session.get('https://paydirect.link2gov.com/NYCParking-Plate/ItemSearch')
sessionToken = tokenRequest.cookies['__RequestVerificationToken']
sessionCookies = tokenRequest.cookies
sessionHeaders = tokenRequest.headers

payload = {
'__RequestVerificationToken': sessionToken,
'ItemSearchQuestionUserInput': 'myplate',
'Questions[0].IsRequired': 'True',
'Questions[0].Sequence': 1,
'Questions[0].Text': 'PlateNumber',
'Questions[0].Type': 'Text',
'ItemSearchQuestionUserInput[1].QuestionAnswer': 'NY',
'Questions[1].IsRequired': 'True',
'Questions[1].Sequence': 2,
'Questions[1].Text': 'State',
'Questions[1].Type': 'Text',
'Questions[2].IsRequired': 'False',
'Questions[2].Sequence': 3,
'Questions[2].Text': 'PlateType',
'Questions[2].Type': 'Text',
'SubmitButton': 'Continue'
}
raw = urllib.urlencode(payload)
plateRequest = session.post('https://paydirect.link2gov.com/NYCParking-Plate/ItemSearch/Submit', data=raw, headers=sessionHeaders, cookies=sessionCookies)

print plateRequest.text

似乎不起作用...我确定我缺少的是一些简单的东西。他们的网站在这里:https://paydirect.link2gov.com/NYCParking-Plate/ItemSearch

谢谢!

最佳答案

似乎服务器对接收显式 Content-Type: application/x-www-form-urlencoded header 很特别,requests 默认不发送.此外,如果您在表单中将其作为 __RequestVerificationToken 提交,它也不会接受 __RequestVerificationToken cookie 的值——您需要从返回的表单中解析实际值https://paydirect.link2gov.com/NYCParking-Plate/ItemSearch。您的表单数据也不遵循原始表单中的实际输入字段 - 您省略了其中一些,并且您传递的是 ItemSearchQuestionUserInput 而不是 ItemSearchQuestionUserInput[0].QuestionAnswer。另一件事是,您实际上提供从第一个请求接收到的 response header 作为第二个请求的 request header ,这没有多大意义 - 这两个上下文是不能像您假设的那样互换。

我已经修改了您的代码,以至于我收到“我们找不到任何匹配项。请检查您的输入并重试。”消息,我在浏览器中提交表单时也会收到此消息 — 我没有实际的美国车牌可以测试。请注意,我引入了对 lxml module 的额外依赖。用于解析第一个请求返回的表单。

#!/usr/bin/env python

import requests
import urllib
from lxml import etree

session = requests.Session()
session.headers.update({'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'})

tokenRequest = session.get('https://paydirect.link2gov.com/NYCParking-Plate/ItemSearch')

parser = etree.HTMLParser()
tree = etree.fromstring(tokenRequest.text, parser)
verificationToken = tree.xpath('//form//input[@name="__RequestVerificationToken"]/@value')[0]

sessionCookies = tokenRequest.cookies

payload = {
'__RequestVerificationToken': verificationToken,
'ItemSearchQuestionUserInput[0].QuestionAnswer': 'myplate',
'Questions[0].IsRequired': 'True',
'Questions[0].Options': '',
'Questions[0].DefaultAnswer': '',
'Questions[0].Sequence': 1,
'Questions[0].Text': 'PlateNumber',
'Questions[0].Type': 'Text',
'ItemSearchQuestionUserInput[1].QuestionAnswer': 'NY',
'Questions[1].IsRequired': 'True',
'Questions[1].Options': '',
'Questions[1].DefaultAnswer': '',
'Questions[1].Sequence': 2,
'Questions[1].Text': 'State',
'Questions[1].Type': 'Text',
'ItemSearchQuestionUserInput[2].QuestionAnswer': '',
'Questions[2].IsRequired': 'False',
'Questions[2].Options': '',
'Questions[2].DefaultAnswer': '',
'Questions[2].Sequence': 3,
'Questions[2].Text': 'PlateType',
'Questions[2].Type': 'Text',
'SubmitButton': 'Continue'
}

raw = urllib.urlencode(payload)
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
}
plateRequest = session.post('https://paydirect.link2gov.com/NYCParking-Plate/ItemSearch/Submit', data=raw, cookies=sessionCookies, headers=headers)

print plateRequest.text

关于python 请求 POST cookie session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23276441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com