2017-09-14 156 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