Sweetohm

Michel Casabianca


J’ai eu aujourd’hui besoin de réaliser des requêtes HTTP en Python en contrôlant finement tous les paramètres de la requête (URL bien sûr, mais aussi la méthode, les en-têtes et le corps) et les valeurs de retour (le statut, le message, le corps et les en-têtes). N’ayant rien trouvé répondant à mon besoin, j’ai dû développer ma propre fonction qui pourrait se rendre utile à l’occasion :

import httplib

def http_request(host, path='/', method='GET', body=None, headers={}):
    connection = httplib.HTTPConnection(host)
    connection.request(method, path, body, headers)
    response = connection.getresponse()
    headers = {}
    pairs = response.getheaders()
    if pairs:
        for pair in pairs:
            headers[pair[0]] = pair[1]
    return {'body': response.read(),
        'status': response.status,
        'headers': headers,
        'message': response.reason}

# exemple de requête à Google
response = http_request('google.com')
print "%s %s" % (response['status'], response['message'])
print "Location: %s" % response['headers']['location']

Ce qui donne :

301 Moved Permanently
Location: http://www.google.com/

On lui passe l’hôte et le port à appeler (par exemple foo:8080), le chemin de l’URL (comme /index.html), la méthode (GET, POST, PUT, DELETE ou autre), le corps et les en-têtes (sous la forme d’un dictionnaire). La méthode renvoie un dictionnaire qui contient les entrées body, status, headers et message.

Enjoy!