-->

传递一个JSON对象与请求的URL(Pass a JSON object to an url wit

2019-09-17 02:56发布

所以,我想用肯尼斯”优秀请求模块 。 同时试图使用摇摇晃晃这个问题的游离碱API 。

基本上,他们的API看起来像这样:

https://www.googleapis.com/freebase/v1/mqlread?query=...

作为查询条件,他们希望一个JSON对象,这里是一个将返回他们的国家和酒精的比例葡萄酒的列表 :

[{
  "country":       null,
  "name":          null,
  "percentage_alcohol": null,
  "percentage_alcohol>": 0,
  "type":          "/food/wine"
}]​

当然,我们不得不逃离地狱的这个它传递给一个URL之前,所以实际的查询将是这样的:

 fullurl = 'https://www.googleapis.com/freebase/v1/mqlread?query=%5B%7B%22percentage_alcohol%3E%22%3A+0%2C+%22country%22%3A+null%2C+%22type%22%3A+%22%2Ffood%2Fwine%22%2C+%22name%22%3A+null%2C+%22percentage_alcohol%22%3A+null%7D%5D'

现在,

r = requests.get(fullurl)
print r.status_code
>>> 400

因为该网站声称,它无法解析的查询。

r2 = urllib2.urlopen(fullurl)
print r2.getcode()
>>> 200

这里没有问题,我得到合理的回报。 有趣的是,

# This is the url of our requests.get request
print urllib2.urlopen(r.url).getcode() 
>>> 200

为什么? 我使用该模块错了吗? 或者是在一个错误requests

Answer 1:

这个对我有用。 这是我做的:

>>> params = [{"country": None,
...            "name": None,
...            "percentage_alcohol": None,
...            "percentage_alcohol>": 0,
...            "type": "/food/wine"
...          }]
>>> import json
>>> params_json = json.dumps(params)

>>> import requests
>>> url = "https://www.googleapis.com/freebase/v1/mqlread?query=%s"
>>> r = requests.get(url % params_json)
>>> r.status_code
200

>>> content_json = json.loads(r.content)
>>> import pprint
>>> pprint.pprint(content_json)
{u'result': [{u'country': u'New Zealand',
              u'name': u'2003 Cloudy Bay Sauvignon Blanc',
              u'percentage_alcohol': 13.5,
              u'type': u'/food/wine'},
             {u'country': u'France',
              u'name': u'G.H. Mumm Cordon Rouge Brut',
              u'percentage_alcohol': 12.0,
              u'type': u'/food/wine'},
....

我切剩下的关闭简洁。 有100个结果。 requests.__version__ == '0.10.6'



文章来源: Pass a JSON object to an url with requests