2017-09-14 130 views
0

我必须使用requests.Session.get从URL获取JSON。 我需要传递一个obj作为参数。 网址是:Python将参数传递给URL

http://c0.3.cn/stock?skuId=5217606&area=1_72_2799_0&venderId=1000000140&cat=670,671,672&buyNum=1&choseSuitSkuIds=&extraParam={%22originid%22:%221%22} 

一些我创建:

obj ={ 
    'skuId': _data_pid, 
    'venderId': _venderid, 
    'cat': _astr, 
    'area': tl, 
    'buyNum': 1, 
    'extraParam': '%7B%22originid%22:%221%22%7D' 
} 

requests.Session.get('http://c0.3.cn/stock', params=obj)` 

一切都是美好的,但参数extraParam,我用{"originid"="1"}"{"originid"="1"}"'%7B%22originid%22:%221%22%7D'是不对的。所以我怎么能通过这个参数?

回答

0

您可以使用json构建字符串,如:

In []: 
import json 
obj = { 
    ... 
    'extraParam': json.dumps({'originid':'1'}, separators=(',', ':')) 
} 

resp = requests.get('http://c0.3.cn/stock', params=obj) 
resp.json() 

Out[]: 
{'choseSuit': [], 
'stock': {'ArrivalDate': '', 
    'Dc': None, 
    'Dti': None, 
    'Ext': 'isdangergoods:0,SoldOversea:1,isOverseaPurchase:0,storeProperty:0,is7ToReturn:1', 
    'IsPurchase': True, 
    'PopType': 0, 
    'StockState': 33, 
    'StockStateName': '现货', 
    'afsCode': 0, 
    'area': {'cityName': '朝阳区', 'countyName': '三环以内', 'provinceName': '北京', 'success': True, 'townName': ''}, 
    'channel': 1, 
    'cla': [{'id': 28, 'name': '抢大额优惠神券', 'url': '//sale.jd.com/act/F5ZurL6zbcN.html'}], 
    'code': 1, 
    'dcashDesc': '', 
    'eir': [{'helpLink': '//help.jd.com/user/issue/103-983.html', 
    'iconCode': 'free_delivery_zhong', 
    'iconSrc': '99元免基础运费(20kg内)', 
    'iconTip': '所选地址自营订单满99元免基础运费(20kg内),不足金额订单收取6元/单基础运费,超出重量加收1元/kg续重运费。', 
    'iconType': 0, 
    'picUrl': '//static.360buyimg.com/item/assets/picon/mianyunfei.png', 
    'resultCode': 1, 
    'showName': '99元免基础运费(20kg内)'}, 
    ... 
+0

但这是错,你可以尝试把URL在浏览器中,结果是不与它一样,我已经拿到了结果在之前。原因可能是extraParam不在URL –

+0

中,似乎webservice对空间比较敏感,用arg更新为'json.dumps()'。 – AChampion