Python:请求

时间:2016-09-10 07:47:09

标签: python python-2.7 http-post python-requests

我尝试使用 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数据。

1 个答案:

答案 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">