Python 3.x Post请求返回空字符串(python)

Python 3.x Post请求返回空字符串(python),python-3.x,http-post,Python 3.x,Http Post,我需要从网站上获取数据。要获取此数据,用户必须首先输入邮政编码。在探索了源代码之后,我得到了以下信息 响应结果(这毕竟是我需要的) 请求数据 Request URL:http://www.lucasmill.com/Resources/ws-common.aspx Request Method:POST Status Code:200 OK Remote Address:111.67.1.113:80 Response Headers view source Cache-Control:priv

我需要从网站上获取数据。要获取此数据,用户必须首先输入邮政编码。在探索了源代码之后,我得到了以下信息

响应结果(这毕竟是我需要的

请求数据

Request URL:http://www.lucasmill.com/Resources/ws-common.aspx
Request Method:POST
Status Code:200 OK
Remote Address:111.67.1.113:80
Response Headers
view source
Cache-Control:private
Content-Length:321
Content-Type:application/json; charset=utf-8
Date:Tue, 21 Feb 2017 20:19:26 GMT
Expires:Tue, 21 Feb 2017 20:19:26 GMT
Server:Microsoft-IIS/8.5
Set-Cookie:dnn_IsMobile=False; path=/; HttpOnly
Request Headers
view source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,ru;q=0.6,uk;q=0.4
Connection:keep-alive
Content-Length:18
Content-Type:application/json; charset=UTF-8
Cookie:.ASPXANONYMOUS=ptTlH_jC0gEkAAAAZTU4MTA5NTItZmNlZS00MzRjLThmYTgtMWZkYWNkOTEwZmY00; dnn_IsMobile=False; language=en-AU; __utmt=1; __utma=97280258.254723646.1487697408.1487697408.1487708346.2; __utmb=97280258.1.10.1487708346; __utmc=97280258; __utmz=97280258.1487697408.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
DNN-Service:true
DNN-Service-Method:GetTown
DNT:1
Host:www.lucasmill.com
Origin:http://www.lucasmill.com
Referer:http://www.lucasmill.com/Sawmilling-Contractors
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
{ 'param':'7468' }
这是我的python代码

import requests
r = requests.post('http://www.lucasmill.com/Resources/ws-common.aspx',data={      'param':'7468' })
print(r.text)
但我收到的回应是一个空字符串。
我错在哪里?

您需要添加一些特定应用程序需要的额外标题。 如果查看浏览器中的请求头转储,可以看到以下内容:

因此,转换为python时,它将如下所示:

import json
import requests

headers = {
        'DNN-Service': 'true',
        'DNN-Service-Method': 'GetTown',
}

r = requests.post('http://www.lucasmill.com/Resources/ws-common.aspx',data=json.dumps({'param':7468}), headers=headers)
print(r.text)
输出

[无][22:28:30]vlazarenko@alluminium(~/tests)$python post.py [{“邮政编码PK”:16666,“邮政编码”:“7468”,“城市”:“麦格理” “国家”:“塔斯”,“国家”:“奥斯特”,“纬度”:“-42.2149353”,“经度”:“145.1951436”,“CanGeocode”:true},{“邮政编码”:16667,“邮政编码”:7468,“城市”:“斯特拉罕”,“州”:“塔斯”,“国家”:“奥斯特”,“纬度”:“-42.1534771”,“经度”:“145.3281242”,“CanGeocode”:true}]


您的post请求即使在我使用
curl
尝试后也不会返回任何内容,因此您的python代码非常好。那么我如何获得所需的响应结果呢?站点的响应数据不足以获得正确的响应数据吗?正在查看。。到目前为止,我还没能得到准确的回答。我在浏览器中看到它。给我一点时间,我也许能想出办法,明白了。让我修改你的代码,我会在一秒钟后公布答案。你怎么知道使用哪个标题和遗漏哪个标题?看起来你只使用了一半。@BillyJhon也删除了一些不必要的。嗯,通过反复试验。基本上,
DNN-*
标题引起了我的注意,因为它们不是标准的。我假设另一边的应用程序需要这些,我是对的:)事实上,只有这两个是需要的,事实上。非常感谢)将进一步与它共舞。祝你晚上愉快。@BillyJhon不客气。如果您也接受答案,我们将不胜感激:)
import json
import requests

headers = {
        'DNN-Service': 'true',
        'DNN-Service-Method': 'GetTown',
}

r = requests.post('http://www.lucasmill.com/Resources/ws-common.aspx',data=json.dumps({'param':7468}), headers=headers)
print(r.text)