3 votes

Quelle est la meilleure alternative pour effectuer cet appel d'API sans utiliser le module python requests ?

J'ai une fonction qui fait une demande GET à l'API REST de JIRA pour extraire l'objet JSON d'un ticket JIRA.

Il utilise le module des requêtes. Mais je ne veux plus l'utiliser parce que chaque fois que je veux que quelqu'un d'autre exécute mon script, il doit sauter à travers des cerceaux ardents pour obtenir le module de demandes parce qu'il est derrière un proxy d'entreprise et qu'il n'a pas le temps de faire le travail supplémentaire.

Donc, au lieu de demander aux gens de faire quelque chose qu'ils n'ont pas la patience ou le temps de faire, je préférerais remplacer le module de demandes par autre chose afin que ce script soit davantage une solution prête à l'emploi.

Voici ce que j'ai maintenant :

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

Je pense que je peux remplacer le module requests par un autre module (intégré à python) qui effectue des requêtes GET sans avoir à modifier trop de code.

Quelqu'un a-t-il une solution simple pour cela, qui ne soit pas le module de demande ? À quoi cela ressemblerait-il si on l'implémentait dans la fonction actuelle que j'ai ?

2voto

Radical Edward Points 85

Voici ce que j'ai trouvé. Cela fonctionne parfaitement !

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

Oui, il y a certaines choses que je pourrais faire pour nettoyer cela, mais je voulais juste aller de l'avant et poster une mise à jour fonctionnelle montrant comment j'ai remplacé le module requests par urllib2.

0voto

Doron Cohen Points 755

Vous pouvez utiliser le langage Python natif urllib : Quel est le moyen le plus rapide de faire un GET HTTP en Python ? .

mais je vous suggère de mettre en place un dépôt interne de paquets Python : https://packaging.python.org/guides/hosting-your-own-index/ . Cela vous permettra d'utiliser le paquet que vous voulez, y compris le paquet Python de JIRA : https://github.com/pycontribs/jira

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X