Bug #8658
Erreur de thème sur requêtes invalides
0%
Description
Traces périodiques sur admin@:
Exception: type = '<class 'requests.exceptions.HTTPError'>', value = '403 Client Error: FORBIDDEN' ... self = <RemoteTemplate object at 0x4b3d510> theme_skeleton_url = 'https://www.mymeaux.fr/__skeleton__/' ... locals: self = <publisher.WcsPublisher instance at 0x33da950> stdin = <open file '<socket>', mode 'r' at 0x3819930> request = <qommon.http_request.HTTPRequest instance at 0x4359248> env = {'HTTP_X_AU_QUOTIDIEN_LOCKED': 'False', 'HTTP_REFERER': 'https://echirolles.au-quotidien.com/etat-civil/copie-d-acte-de-naissance/' <---- ??
Demandes liées
Historique
Mis à jour par Frédéric Péters il y a plus de 8 ans
- Projet changé de Publik à w.c.s.
- Sujet changé de Erreurs 403 sur la récuperation du thème pour wcs à Erreur de thème sur requêtes invalides
- Priorité changé de Normal à Bas
Dans la suite :
output = <htmltext '<div id="info"><h2>Invalid request</h2><div class="error-page"><p>Unable to parse HTTP request.</p></div></div>'> start_time = 1444911464.676738 request = <qommon.http_request.HTTPRequest instance at 0x4359248> exc = RequestError() self = <publisher.WcsPublisher instance at 0x33da950>
Et le même genre de trace a eu lieu sur de l'affichage de page 404 sur un domaine non déclaré (pour contourner ça j'ai mis en place une redirection vers publik.entrouvert.com pour les domaines non déclarés).
Il doit y avoir dans une situation d'affichage d'erreur (via self.finish_failed_request) un truc qui ne tourne pas rond (peut-être parce que ça recrée un objet HTTPResponse avec quelques raccourcis).
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
def process_request(self, request): """(request : HTTPRequest) -> HTTPResponse Process a single request, given an HTTPRequest object. The try_publish() method will be called to do the work and exceptions will be handled here. """ self._set_request(request) start_time = time.time() try: self.parse_request(request) output = self.try_publish(request) except PublishError, exc: # Exit the publishing loop and return a result right away. output = self.finish_interrupted_request(exc) except: # Some other exception, generate error messages to the logs, etc. output = self.finish_failed_request() output = self.filter_output(request, output) self.logger.log_request(request, start_time) if output: if self.config.compress_pages and request.get_encoding(["gzip"]): compress = True else: compress = False request.response.set_body(output, compress) self._clear_request() return request.response
À mon avis l'erreur a lieu dans le self.parse_request() or comme le set_app_dir() a lieu dans le try_publish() exécuté juste après, on est encore dans le app_dir précédent et donc si l'app_dir précédent utilise un RemoteTemplate on va interroger son combo et il ne va pas accepter le host qu'il reçcoit (Publisher._set_request() ayant été exécuté on a bien la bonne requête à ce moment là).
Il faudrait faire le set_app_dir() plus tôt, avant tout traitement de la requête.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
Aussi je ne sais pas pourquoi mais on perd le champ public_msg dans le template des erreurs, ça nous aiderait à savoir pourquoi cette requête est initialement refusée.
Quand je grep wcs/quixote je vois qu'il y a tout un tas d'erreurs de parsing possible qu'on ne retrouve pas dans la page d'erreur:
auquo:/usr/share/pyshared# grep -Ri 'RequestError' quixote wcs quixote/errors.py:class RequestError(PublishError): quixote/http_request.py:from quixote.errors import RequestError quixote/http_request.py: raise RequestError('unknown charset %r' % charset) quixote/http_request.py: raise RequestError('invalid %r encoded string' % charset) quixote/http_request.py: raise RequestError('expected Content-Disposition: form-data ' quixote/http_request.py: raise RequestError('invalid content-length header') quixote/http_request.py: raise RequestError('unexpected end of request body') quixote/http_request.py: raise RequestError('multipart/form-data missing boundary') quixote/http_request.py: raise RequestError('unexpected end of multipart/form-data') quixote/http_request.py: raise RequestError('expected Content-Disposition header') quixote/http_request.py: raise RequestError('expected Content-Disposition: form-data' wcs/qommon/http_request.py:from quixote.errors import RequestError wcs/qommon/http_request.py: raise RequestError('invalid json payload (%s)' % str(e))
Ça a l'air d'une décision délibérée de ne pas l'afficher1 mais vu que PublishtError.__repr__() ne le donne pas non plus l'information est finalement complètement perdue même dans la trace.
[1]:
def format_publish_error(exc): return template.error_page(_(exc.description), _(exc.title))
Mis à jour par Frédéric Péters il y a plus de 8 ans
Benjamin Dauvergne a écrit :
Ça a l'air d'une décision délibérée de ne pas l'afficher1 mais vu que PublishError.__repr__() ne le donne pas non plus l'information est finalement complètement perdue même dans la trace.
Décision sans doute très réfléchie en cet agréable début d'après-midi du 6 septembre 2005. (sérieusement, si tu veux faire un patch permettant de voir ce message, vas-y)
Mis à jour par Frédéric Péters il y a presque 7 ans
- Dupliqué par Bug #16691: mic mac sur le publisher lors de la récupération d'un template par wcs, qui demande le template d'un autre site ajouté
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Nouveau à Fermé
La récupération du squelette de thème passe désormais par le code commun dans hobo et n'a plus ce problème.