Comment puis-je envoyer l'en-tête "Set-Cookie" lorsque vous travaillez avec un Quel basehttpServerreQuestHandler code> et
cookie code>?
basecookie code> et les enfants ne fournissent pas de méthode de sortie la valeur à transmettre dans
send_header () code> et
* cookie.output () code> fait Ne pas fournir un délimiteur http ligne. p>
Cookie Code> La classe dois-je utiliser? Deux ont survécu à Python3, quelles sont les différences? P>
3 Réponses :
Utilisez Exemple ici P> Le gestionnaire de requête a un c = http.cookie.simplecookie code> pour maintenir les cookies, puis
c.output () code> pour créer les en-têtes pour cela.
WFILE code> attribut, qui est la prise. p>
@Tor Cet envoi ne fonctionne pas, SimpleCookie ne produit pas un en-tête complet
Bien sûr, vous devez ajouter plus d'en-têtes que les cookies ... Je pensais que c'était évident.
Non, la sortie du cookie n'est pas valide pour écrire soit sur self.wfile code> dans le gestionnaire ou b> à
auto.send_header () code>
@Tor. Je connais l'exemple que vous avez donné looks i> à droite, mais si vous essayez réellement, vous verrez de quoi je parle.
L'exemple que j'ai donné est de l'exemple de lien au-dessus de celui-ci .. L'exemple général est extrait de la source de basehttpequestHandler ...
Self.Send_header ('Set-Cookie', C.Output (Header = '')) Code> Travaille. L'a eu d'ici. B.LEPPOC.net/2010/02/12/Simple -webserver-in-python gênant ce n'est pas documenté dans le http.server.html ou le http.cokies.html Python Docs ..
Il semble depuis Python 3.3, send_response () code> écrit sur un tampon interne, qui est envoyé sur le serveur uniquement lorsque
end_headers () code> est appelé (voir
wfile.write code>, si d'autres en-têtes sont ajoutés avec
Send_Response () code>. C'est la raison pour laquelle cela ne fonctionne pas avec Python> = 3.3.
Vous pouvez également affleurer la mémoire tampon d'en-tête en utilisant flush_headers () .
J'ai utilisé le code ci-dessous, qui utilise Les paramètres de SimpleCookie code>
de http.cookies pour produire un objet pour un cookie.
Ensuite, j'ajoute une valeur à cela, et enfin, je l'ajoute à la liste des en-têtes
Pour envoyer (en tant que champ
Set-Cookie COCOLE>) avec l'habituel
send_header code>:
cookie.output < / code> sont importants: p>
en-tête = '' code> garantit qu'aucun en-tête n'est ajouté à la chaîne qu'elle produit (si non terminé, il produira une chaîne qui commencera par
Set-Cookie: Code> , qui fera des cordes comme celle dans la même en-tête, puisque
send_header code> ajoutera le sien). Li>
sep = '' code> ne provoque aucun séparateur final. LI>
ul> p>
Cela ne fonctionnera que s'il n'y aura qu'un seul cookie à une fois écrit
Ceci envoie une en-tête Set-Cookie pour chaque cookie
def do_GET(self): self.send_response(200) self.send_header("Content-type", "text/html") cookie = http.cookies.SimpleCookie() cookie['a_cookie'] = "Cookie_Value" cookie['b_cookie'] = "Cookie_Value2" for morsel in cookie.values(): self.send_header("Set-Cookie", morsel.OutputString()) self.end_headers() ...
Cette réponse doit être acceptée. D'autres sont incomplets.