使用Python请求库获取ajaxjson输出

2024-10-01 13:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我请求一个带有Python脚本的Ajax网站,获取http://www.yurticikargo.com/bilgi-servisleri/Sayfalar/en-yakin-sube.aspx的城市和分支机构

我完成了发布的第一步 {cityID: 34}并将JSON输出fetc。在

http://www.yurticikargo.com/_layouts/ArikanliHolding.YurticiKargo.WebSite/ajaxproxy-sswservices.aspx/GetTownByCity

但是我不能用Python检索JSON输出,尽管我成功地使用了Chrome高级Rest客户端扩展,发布了{cityID:54,townID:5416,unitOnDutyFlag:null,closestFlag:2}

http://www.yurticikargo.com/_layouts/ArikanliHolding.YurticiKargo.WebSite/ajaxproxy-unitservices.aspx/GetUnit

所有的源代码都在这里

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import json


class Yurtici(object):

    baseUrl = 'http://www.yurticikargo.com/'
    ajaxRoot = '_layouts/ArikanliHolding.YurticiKargo.WebSite/ajaxproxy-sswservices.aspx/'
    getTown = 'GetTownByCity'
    getUnit = 'GetUnit'
    urlGetTown = baseUrl + ajaxRoot + getTown
    urlGetUnit = baseUrl + ajaxRoot + getUnit 
    headers = {'content-type': 'application/json','encoding':'utf-8'}

    def __init__(self):
        pass

    def ilceler(self, plaka=34): # Default testing value
        payload = {'cityId':plaka}
        url = self.urlGetTown
        r = requests.post(url, data=json.dumps(payload), headers=self.headers)
        return r.json() # OK

    def subeler(self, ilceNo=5902): # Default testing value
        # 5902 Çerkezköy 
        payload=  {'cityID':59,'townID':5902,'unitOnDutyFlag':'null','closestFlag':0}
        url = self.urlGetUnit
        headers = {'content-type': 'application/json','encoding':'utf-8'}
        r = requests.post(url, data=json.dumps(payload), headers=headers)
        print  r.status_code, r.raw.read()

if __name__ == '__main__':        
    a = Yurtici()
    print a.ilceler(37) # OK
    print a.subeler()   # NOT OK !!!

Tags: selfcomjsonhttpurlwwwwebsiteheaders
1条回答
网友
1楼 · 发布于 2024-10-01 13:32:34

您的代码没有发布到文本示例中使用的同一个url。在

让我们倒过来看看。首先,让我们看看失败的帖子。在

url = self.urlGetUnit
headers = {'content-type': 'application/json','encoding':'utf-8'}
r = requests.post(url, data=json.dumps(payload), headers=headers)

所以我们要发布到一个URL,它等于self.urlGetUnit。好吧,让我们看看这是如何定义的:

^{pr2}$

如果您在urlGetUnit中执行此操作,您将得到URL将是http://www.yurticikargo.com/_layouts/ArikanliHolding.YurticiKargo.WebSite/ajaxproxy-sswservices.aspx/GetUnit。让我们把这个和你在Chrome中使用的URL放在一起比较一下:

http://www.yurticikargo.com/_layouts/ArikanliHolding.YurticiKargo.WebSite/ajaxproxy-sswservices.aspx/GetUnit
http://www.yurticikargo.com/_layouts/ArikanliHolding.YurticiKargo.WebSite/ajaxproxy-unitservices.aspx/GetUnit

看到区别了吗?ajaxRoot对于这两个url不是相同的。整理一下,您将得到一个JSON响应。在

相关问题 更多 >