2011-02-23 1 views
2

Devrait-il être possible d'envoyer une simple requête POST http (non codée en blocs) dans plus d'un segment? Je pensais utiliser httplib.HTTPConnection et appeler la méthode send plus d'une fois (et en appelant read sur l'objet de réponse après chaque send).envoi multiple sur httplib.HTTPConnection, et lecture multiple sur HTTPResponse?

(Contexte:.. Je collabore à la conception d'un serveur qui offre des services analogues aux transactions [série de demandes-réponses liées entre elles] Je suis à la recherche de la plus simple, la représentation HTTP le plus compatible)

Répondre

1

Après avoir été convaincu par des amis que cela devrait être possible, j'ai trouvé un moyen de le faire. Je remplace httplib.HTTPResponse (n.b. httplib.HTTPConnection est assez agréable de vous permettre de spécifier le response_class instancié).

Regarder socket.py et httplib.py (en particulier _fileobject.read()), je l'avais remarqué que read() seulement permis 2 choses:

  • lire un nombre exact d'octets (ce retourne immédiatement, même si la connexion est non fermée)
  • lire tous les octets jusqu'à ce que la connexion est fermée

Je suis en mesure d'étendre ce comportement et permettre en streaming gratuit avec seulement quelques lignes de code. J'ai également dû mettre le will_close membre de mon HTTPResponse à 0.

Je serais toujours intéressé d'entendre si cela est considéré comme une utilisation acceptable ou abusive de HTTP.