我尝试使用 Python 2.7 中的请求2.9.1 来了解如何发送 POST 数据。但是,我觉得我在提供请求的数据中遗漏了某些内容,或者某种方式错误地表达了某些内容并且一直在敲打我的脑袋。
基于表单数据的网站是:http://qpublic9.qpublic.net/la_orleans_address.php
我使用Charles(https://www.charlesproxy.com)来查看POST数据的实际内容,这就是我所看到的。我输入的数据 1013 ,街道号(字段为 streetNumber )和ST ANN(依靠自动填充)为*街道名称**( streetName 是此处的字段)。这就是我需要手动输入网站的所有内容,我从Charles收到了这个POST数据:
BEGIN=0&searchType=address_search&streetNumber=1013&streetName=ST+ANN&streetType=&streetDirection=&streetUnit=&Address+Search=Address+Search
最初我只尝试使用 streetNumber 和 streetName ,因为这是我从网站测试时输入的唯一数据,但这会产生错误。现在我为没有输入的数据输入空字段,我猜这可能导致问题,但我不确定。以下是我用于代码的内容,然后是我收到的错误消息(这是一条SQL错误消息,让我觉得我的格式化方式有问题或许数据有效载荷。
import requests
payload = {'searchType': 'address_search', 'streetNumber': '1013', \
'streetName': 'ST+ANN', 'streetType': '', 'streetDirection': '', \
'streetUnit': '', 'Address+Search': 'Address+Search' }
response = requests.post("http://qpublic9.qpublic.net/la_orleans_alsearch.php", \
data=payload)
print response.text
输出和错误:
<LINK REL=stylesheet HREF="http://www.qpublic.net/la/neworleans/sytle.css"
TYPE="text/css">
Could Not Read Data:You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the
right syntax to use near ' 100' at line 1
由于我只是一个用户,而不是该网站的开发人员,因此我无法查看其后端代码的外观,但由于它可以在我的浏览器中使用该网站,因此我可以#&# 39;猜测它与我的有效负载格式而不是代码有关。
有关我可能遗失的任何建议吗?或者有类似问题的经历?无论我删除了多少空字段,我都会遇到同样的错误。
谢谢!
编辑:在我的代码中,我没有使用python代码的反斜杠,我在这里使用它来更容易阅读。此外,错误消息中没有换行符,只是为了便于阅读。由于我不熟悉POST数据的结构,因此我不会像查理一样离开,以防更改内容可能会导致错误传达。
编辑2:我在测试时收到200( )的响应代码,所以它似乎不是通过HTTP连接出错,所以再一次让我觉得我错过了POST数据。
答案 0 :(得分:0)
取出你在单词之间放置的所有+
个字符。这是空间的URL编码表示,但requests
模块为您执行此操作。如果您明确使用它,它将重新编码+
,因此服务器脚本会将其视为文字+
,而不是它应该被解码的空间。
您还错过了BEGIN=0
中的payload
参数。在我的测试中,这似乎是你得到的错误的原因。
payload = {'BEGIN': '0', 'searchType': 'address_search', 'streetNumber': '1013', \
'streetName': 'ST ANN', 'streetType': '', 'streetDirection': '',
'streetUnit': '', 'Address Search': 'Address Search' }
如果查看网页源代码,那就是隐藏的输入之一:
<INPUT TYPE=HIDDEN NAME=BEGIN VALUE="0">
<INPUT TYPE=HIDDEN NAME="searchType" VALUE="address_search">