【问题标题】:How to use python api get request如何使用python api获取请求
【发布时间】:2019-11-15 02:45:14
【问题描述】:

我使用以下函数从网络获取数据,但失败了。不知urllib.quote是否用错了

我用过urllib.urlencode(xx),但它显示not a valid non-string sequence or mapping object

我的请求数据是:

[{"Keys": "SV_cY1tKhYiocNluHb", "Details": [{"id2": "PK_2gl9xtYKX7TJi29"}], "language": "EN", "id": "535985"}]

任何人都可以提供帮助。非常感谢!!!

###This Funcation call API Post Data
def CallApi(apilink, indata):
    token = gettoken()
    data = json.dumps(indata, ensure_ascii=False)
    print(data)
    headers = {'content-type': 'application/json', 'Accept': 'application/json', 'Authorization': 'Bearer %s' % (token)}
    proxy = urllib2.ProxyHandler({})
    opener = urllib2.build_opener(proxy)
    urllib2.install_opener(opener)
    DataForGet=urllib.quote(data)
    NewUrl= apilink + "?" + DataForGet
    request = urllib2.Request(NewUrl, headers=headers)
    response = urllib2.urlopen(request, timeout=300)
    message = response.read()
    print(message)

错误:

下面的错误消息:文件“/opt/freeware/lib/python2.7/urllib2.py”,第 1198 行,在 do_open 中引发 URLError(err)

【问题讨论】:

  • 和下面的错误消息:文件“/opt/freeware/lib/python2.7/urllib2.py”,第 1198 行,在 do_open 中引发 URLError(err)
  • 如果你尝试使用导入请求?
  • 这是旧服务器和python 2.7版,无法安装请求模型
  • Requests 正式支持 Python 2.7 & 3.4–3.7
  • 但是需要 pip 安装对吗?当前我们的服务器不允许安装模型

标签: python api get urllib urllib2


【解决方案1】:

你可以看到urlencode

的评论

将字典或二元素元组序列编码为 URL 查询字符串

所以你可以选择删除外部[]

{"Keys": "SV_cY1tKhYiocNluHb", "Details": [{"id2": "PK_2gl9xtYKX7TJi29"}], "language": "EN", "id": "535985"}

或者使用二元组

(('Keys', 'SV_cY1tKhYiocNluHb'), ('Details', [{...}]...)

演示

>>> import urllib
>>> s = {"Keys": "SV_cY1tKhYiocNluHb", "Details": [{"id2": "PK_2gl9xtYKX7TJi29"}], "language": "EN", "id": "535985"}
>>> urllib.urlencode(s)
'Keys=SV_cY1tKhYiocNluHb&Details=%5B%7B%27id2%27%3A+%27PK_2gl9xtYKX7TJi29%27%7D%5D&language=EN&id=535985'
>>> 

【讨论】:

  • 我已经删除了外部 [] ,但仍然是 URLError(err) ,同时数据是数组,因此删除了外部 [] 似乎不满足。
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2021-12-27
  • 2015-03-04
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多