[Maintenant] Python débutant a essayé d'implémenter le client HTTP à l'aide de requêtes (y compris l'opération d'en-tête)

Je suis désolé d'avoir utilisé les ressources avec le matériel plein de sentiments maintenant, M. Qiit.

Il est nécessaire de frapper en changeant diverses API Web dans le système métier de l'entreprise, j'ai donc pensé que je l'essayerais avec Python. J'ai déjà fait une communication en utilisant l'objet socket, alors j'ai pensé que ce serait en quelque sorte.

Ainsi, en créant un client HTTP basé sur une socket, j'ai essayé divers gugrecas et j'ai trouvé que cela semblait différent. Après une enquête plus approfondie, je suis arrivé à la conclusion qu'il serait préférable d'utiliser requêtes.

Donc, pour le moment, j'ai fait quelque chose que je pourrais simplement obtenir.

Fonctionnalité

À propos des demandes

Informations sur la demande

Dans ce cas, il est principalement décrit dans le document ci-dessus.

installer

les requêtes doivent être installées avec pip. Dans mon cas, j'ai vérifié avec Cygwin (32 bits) de Windows 10.

(Référence) Utilisation de pip avec Cygwin

Les informations sur ce site ont été très utiles. Merci, tanao.

En regardant le site ci-dessus, il semble qu'il y ait eu diverses manipulations autour de pip dans Cygwin, mais à partir du 18 juillet 2016, il semble que ce qui suit peut être fait si l'environnement est Windows10 / Cygwin32bit, Python2.7.

Code de classe du client HTTP

Pour le moment, j'ai essayé d'en faire une classe avec une raison pitoyable de me souvenir comment écrire la classe.

import requests

class SampleHTTPclient:

    def __init__(self, url):
        self.url = url
        self.protocol = ""
        self.error_message = ""
        self.request_headers = None
        self.response_headers = None
        self.status_code = None

    def check_protocol(self):
        # ex
        # if self.protocol = "http://" , self.uri = "hoge.org":
        #  self.url = "http://hoge.org"
        if self.url.find("://") == -1 and len(self.protocol) > 3:
            self.url = self.protocol + self.url

    def set_protocol(self, protocol):
        self.protocol = protocol
        self.check_protocol()

    def set_headers(self, headers):
        self.request_headers = headers

    def get(self, fp):
        try:
            if self.request_headers is None:
                response = requests.get(self.url)
            else:
                response = requests.get(self.url, headers=self.request_headers)
            fp.write(response.content)
        except Exception as ex:
            self.error_message = str(ex)
            return False
        else:
            self.status_code = response.status_code
            self.response_headers = response.headers
            return True

    def get_code(self):
        return self.status_code

    def get_headers(self):
        return self.response_headers

    def get_error_message(self):
        return self.error_message

La substance est de deux lignes, mais ... je me suis trompé. ..

L'utilisation est l'image suivante.

  1. Commencez par créer une instance avec une URL
  2. Si les données URL n'incluent pas http: //, vous pouvez spécifier le protocole à utiliser avec set_protocol (* 1).
  3. S'il y a un en-tête à ajouter, entrez le dict conformément aux spécifications des demandes dans set_headers S'il vous plaît. Il existe également un exemple de code ci-dessous, vous pouvez donc vous y référer également.
  4. Utilisez open pour ouvrir le fichier en mode écriture.
  5. Utilisez-le pour appeler get. Vous pouvez voir le succès (True) et l'échec (False) avec bool
  6. Si la communication réussit, le corps se trouve dans le fichier spécifié (* 2).
  7. Si la communication réussit, vous pouvez obtenir le code d'état HTTP avec get_code.
  8. Si la communication réussit, utilisez get_headers [en-tête de réponse sous la forme du dict spécifié dans la spécification de la requête](http://docs.python-requests.org/en/master/user/quickstart/#response- Vous pouvez obtenir des en-têtes).
  9. En cas d'échec, vous pouvez obtenir le message d'erreur avec get_error_message.

Exemple de code à obtenir

Voici un exemple d'utilisation de SampleHTTPclient avec la description ci-dessus codée.

print "sample httpc program."

url = "<<L'URL de la ressource pour y accéder>>"
headers = {"X-gdaigo_para1": "fujiko", "X-gdaigo-para2":"7890"}
filename = "test.html"
print url, " -> " , filename

httpc = SampleHTTPclient(url);
httpc.set_protocol("http://")
httpc.set_headers(headers)
fp = open(filename, "w")
success = httpc.get(fp)
fp.close()
if success == True:
    headers = httpc.get_headers()
    print "response code=", httpc.get_code()
    for key, value in headers.iteritems():
        print key, ":" , value
    print "success."
else:
    print "httpc:read error\n" , httpc.get_error_message()
    print "error."

print "complete."

L'exemple ci-dessus est un exemple d'acquisition de ressources basées sur l'URL et d'acquisition des données sous forme de test.html. L'en-tête est défini (même s'il n'a pas de sens) et le résultat de l'acquisition est également affiché. GET semble être bien comme ça.

J'ai donc pu le faire relativement facilement en utilisant des requêtes.

Licence

Je l'ai utilisé ci-dessous. Merci d'avoir fourni le merveilleux logiciel.

c'est tout.

Recommended Posts

[Maintenant] Python débutant a essayé d'implémenter le client HTTP à l'aide de requêtes (y compris l'opération d'en-tête)
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
J'ai essayé d'implémenter PLSA dans Python 2
Connectez-vous à Slack à l'aide de requêtes en Python
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé d'implémenter le tri sélectif en python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé d'implémenter le poker de Drakue en Python
J'ai essayé d'implémenter le perceptron artificiel avec python
Écrire des données dans KINTONE à l'aide du module de requêtes Python
J'ai essayé d'implémenter SSD avec PyTorch maintenant (Dataset)
J'ai essayé d'accéder aux feuilles de calcul Google en utilisant Python
Serveur HTTP et client HTTP utilisant Socket (+ navigateur Web) --Python3
J'ai essayé de rechercher des vidéos à l'aide de l'API de données Youtube (débutant)
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
J'ai essayé d'obtenir les informations du Web en utilisant "Requests" et "lxml"
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
J'ai fait un chronomètre en utilisant tkinter avec python
Un débutant en python a essayé de faire un stage dans une entreprise informatique
J'ai essayé d'implémenter le blackjack du jeu Trump en Python
J'ai essayé d'implémenter SSD avec PyTorch maintenant (édition du modèle)
Quand j'ai essayé de gratter en utilisant des requêtes en python, j'étais accro à SSLError, donc un mémo de contournement