使用Python请求库POST到.jsp网站

时间:2014-07-16 04:58:01

标签: javascript python jsp post

我正在使用Python 3.3和Requests 2.2.1。

我正在尝试POST到以.jsp结尾的网站,然后更改为.doh结尾。使用相同的基本请求代码大纲我能够成功登录和抓取其他网站,但该网站上的javascript部分无法正常工作。这是我的代码:

import requests

url = 'https://prodpci.etimspayments.com/pbw/include/sanfrancisco/input.jsp'
payload = {'plateNumber':'notshown', 'statePlate':'CA'} #tried CA and California

s = requests.Session() #Tried 'session' and 'Session' following different advice
post = s.post(url, data=payload)
r = s.get('https://prodpci.etimspayments.com/pbw/include/sanfrancisco/input.jsp')
print(r.text)

最后,当通过firefox浏览器手动将数据输入到网页时,页面会发生变化,网址会变为https://prodpci.etimspayments.com/pbw/inputAction.doh,如果您在输入牌照后重定向到该页面,则只会有相应的内容。

从印刷文本中,我知道我正在从页面获取内容,因为它没有POSTing任何内容,但是一旦我发布了有效负载,我就需要页面的内容。 对于POST有效负载,我是否需要包含类似“提交”的内容:“提交”以模拟单击搜索按钮?

我是否正在从正确的网址发出GET请求,考虑到我发布的网址?

1 个答案:

答案 0 :(得分:4)

您正在发出POST请求,然后是另一个GET请求,这就是您获得与表单相同的页面的原因。

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

此外,如果您检查表单标记,您会发现其操作为/pbw/inputAction.doh,此外表单还会从hidden输入中发送一些参数。因此,您应该在请求中使用该URL,并且可能使用hidden输入的值。

enter image description here

使用下一个代码,我可以在浏览器中检索与常规请求相同的响应:

import requests

url = 'https://prodpci.etimspayments.com/pbw/inputAction.doh'
payload = {
    'plateNumber': 'notshown',
    'statePlate': 'CA',
    'requestType': 'submit',
    'clientcode': 19,
    'requestCount': 1,
    'clientAccount': 5,
}

s = requests.Session()
response = s.post(url, data=payload)
print(response.text)

您可以通过以下表单在浏览器中看到相同的内容:

...
<td colspan="2"> <li class="error">Plate is not found</li></td>
...