Comment se connecter à un serveur en utilisant les authentiques http auth thru sockets en python. Je ne veux pas utiliser urllib/urllib2 etc car mon programme effectue des opérations d'E/S de bas niveau sur le socketAuthentification de base HTTP à l'aide de sockets en python
Répondre
L'endroit le plus facile à utiliser est probablement makefile()
pour obtenir une interface de type fichier plus simple à la socket.
import socket, base64
host= 'www.example.com'
path= '/'
username= 'fred'
password= 'bloggs'
token= base64.encodestring('%s:%s' % (username, password)).strip()
lines= [
'GET %s HTTP/1.1' % path,
'Host: %s' % host,
'Authorization: Basic %s' % token,
'Connection: close',
]
s= socket.socket()
s.connect((host, 80))
f= s.makefile('rwb', bufsize=0)
f.write('\r\n'.join(lines)+'\r\n\r\n')
response= f.read()
f.close()
s.close()
Vous devez faire beaucoup plus de travail que si vous avez besoin d'interpréter la réponse retournée à choisir les en-têtes HTML ou requis auth, et de gérer les redirections, erreurs, codage de transfert et tout ce qui droite. HTTP peut être complexe! Êtes-vous sûr de devoir utiliser une socket de bas niveau?
Regarder par exemple à sources d'urllib, en particulier la fonction http_error_401
(et l'expédition autour bien sûr): faire la requête HTTP, regarder pour une réponse 401, extraire son royaume, vérifier que son régime est basic
, essayez à nouveau avec l'utilisateur et mot de passe pour ce domaine (cfr fonction retry_http_basic_auth
dans ce même fichier source). Beaucoup de travail bien sûr, mais c'est le prix de la programmation "jusqu'au métal nu" comme vous le souhaitez.