在不使用 python requests 模块的情况下进行此 API 调用的最佳选择是啥?
Posted
技术标签:
【中文标题】在不使用 python requests 模块的情况下进行此 API 调用的最佳选择是啥?【英文标题】:What is the best alternative for making this API call without using the python requests module?在不使用 python requests 模块的情况下进行此 API 调用的最佳选择是什么? 【发布时间】:2018-10-06 01:41:22 【问题描述】:我有一个函数向 JIRA REST API 发出 GET 请求,以提取 JIRA 票证的 JSON 对象。
它使用请求模块。但我不想再使用它了,因为每当我想让其他人运行我的脚本时,他们需要跳过火热的箍来获取请求模块,因为他们在公司代理后面,而且他们没有时间放置在额外的工作中。
因此,与其要求人们做他们没有耐心或时间去做的事情,我更愿意用其他东西替换 requests 模块,这样这个脚本就更像是一个开箱即用的脚本解决方案。
这是我现在拥有的:
import requests
import pprint
def pull_jira_info(jira, user, pw, url):
"""
Arguments:
jira - the JIRA issue number
url - the first part of the JIRA server url
user - JIRA username
pw - JIRA password
"""
url += '/rest/api/2/issue/' + jira
r = requests.get(url, auth=(user, pw), verify=False)
jira_info = r.json()
pprint.pprint(jira_info)
return jira_info
我的猜测是,我可以将 requests 模块与其他一些执行 GET 请求的模块(内置于 python)进行简单的交换,而无需更改太多代码。
有没有人有一个不是请求模块的简单方法?在我拥有的当前函数中实现时会是什么样子?
【问题讨论】:
你必须跳过箍来安装模块?这似乎是需要在这里解决的更大问题。 (我知道,你可能情不自禁,但这听起来很疯狂……) 哦不,不是我!哈哈,我的意思是,我是第一个实现 requests 模块的人——所以我对此没有任何问题。是那些试图使用我的脚本的人。这些天来,如果它不是一个开箱即用的脚本,大多数人都没有耐心或能力安装依赖项以使其工作。由于他们在公司代理背后,这增加了他们宁愿不做的另一层工作。 【参考方案1】:这就是我想出的。效果很好!
import base64
import json
import pprint
import urllib2
def auth_str(user, pw):
"""
Arguments:
user - (Required) jira username
pw - (Required) jira password
"""
auth = base64.b64encode('%s:%s' % (user, pw))
return auth
def pull_jira(jira, user, pw, url):
"""
Arguments:
jira - (Required) jira issue number
user - (Required) jira username
pw - (Required) jira password
url - (Required) jira server url
"""
url += '/rest/api/2/issue/' + jira
r = urllib2.Request(url)
r.add_header('Authorization', 'Basic %s' % auth_str(user, pw))
r.add_header('Content-Type', 'application/json')
jira_data = json.load(urllib2.urlopen(r))
pprint.pprint(jira_data)
return jira_data
是的,我可以做一些事情来清理它,但我只是想继续发布一个工作更新,展示我如何用 urllib2 替换 requests 模块。
【讨论】:
【参考方案2】:你可以使用原生 Python urllib
: What is the quickest way to HTTP GET in Python?。
但我建议建立一个内部 Python 包存储库:https://packaging.python.org/guides/hosting-your-own-index/。这将允许您使用任何您想要的包,包括 JIRA Python 包:https://github.com/pycontribs/jira
【讨论】:
以上是关于在不使用 python requests 模块的情况下进行此 API 调用的最佳选择是啥?的主要内容,如果未能解决你的问题,请参考以下文章