【问题标题】:POST requests to ASP site don't bring a good result对 ASP 站点的 POST 请求不会带来好的结果
【发布时间】:2014-11-01 15:01:19
【问题描述】:

我尝试创建对 ASP 站点的 POST 请求(就像在 Firefox 中一样),以获取 JSON 响应。
但在我的代码中,响应是 html,而不是 JSON。

link to site

Firebug 响应标头:

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 08 Sep 2014 11:32:22 GMT
Content-Length: 101

Firebug 请求标头:

POST /Portal/WebPageMethods/Playlista/playlist.aspx HTTP/1.1
Host: www.polskieradio.pl
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://www.polskieradio.pl/10,Czworka.json
Content-Length: 17
Cookie: cookies-accepted=true; ASP.NET_SessionId=35p3kig5t5cmlikubnlnytlh
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

源代码:

import requests
import json

url = "http://www.polskieradio.pl/Portal/WebPageMethods/Playlista/playlist.aspx?program=4&count=1"
payload = { "Host": "www.polskieradio.pl",
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0",
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Accept-Language": "pl,en-US;q=0.7,en;q=0.3",
        "Accept-Encoding": "gzip, deflate",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "X-Requested-With": "XMLHttpRequest",
        "Referer": "http://www.polskieradio.pl/10,Czworka",
        "Content-Length": "17",
        "Cookie": "cookies-accepted=true; ASP.NET_SessionId=5l1eezrjfdyvvevxushojtc2",
        "Connection": "keep-alive",
        "Pragma": "no-cache",
        "Cache-Control": "no-cache"
        }
r = requests.post(url, data=json.dumps(payload))
print(r.headers['content-type'])
print r.content

如何正确执行此操作?
感谢您的回答!

【问题讨论】:

    标签: python json python-2.7 xmlhttprequest python-requests


    【解决方案1】:

    尝试一些不同的...

    看这个例子:

    headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
    r = requests.post(url, data=json.dumps(data), headers=headers)
    

    Accept 是标头,而不是有效负载。

    您作为有效负载发送的所有内容实际上都是标头。 您的 POST 有效负载可能是 program=4&count=1,或者您可以执行 GET。

    --- 添加最终解决方案

    import requests
    import json
    
    url = "http://www.polskieradio.pl/Portal/WebPageMethods/Playlista/playlist.aspx"
    
    data = 'program=4&count=1'
    headers = { 
            'User-Agent': 'curl/7.35.0',
            'Host': 'www.polskieradio.pl',
            'Accept':'*/*',
            'Proxy-Connection': 'Keep-Alive',
            'Content-Type': 'application/x-www-form-urlencoded'
            }
    
    r = requests.post(url, data=data, headers=headers)
    print r.content
    

    【讨论】:

    • 我这样使用的时候:post(url, data=json.dumps(data), headers=headers)响应内容一样:text/html; charset=utf-8
    • 您是否发送了有效载荷 AS 标头?您需要这一行,并修改您的代码以将这些标头作为标头发送,而不是作为数据。
    • 确实,它没有返回 json...你是如何第一次尝试使用 Firefox 的?你做了什么改变使它工作?
    • 我只是使用 Firebug 网络工具来找到这个请求,我想用 python 脚本做同样的事情。
    • 知道了!问题出在网站上。它不将 json 识别为 POST 的有效负载。您需要发送原始数据。看看我上面编辑的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多