在不使用 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 调用的最佳选择是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在不安装的情况下使用/加载新的python模块

Python模块-requests模块使用

python (requests模块使用)

python json requests request 模块

python笔记8:requests模块

Python模块-requests