2010-10-22 17 views
-1

J'utilise google appening, c'est l'environnement CGI. Je veux bloquer certaines demandes, je veux rien réponse même pas de code d'état http. Alternative, je veux juste fermer la connexion. Puis-je faire ceci?GAE CGI: comment répondre code de statut http

mise à jour:

Je décide d'utiliser ce pyfunc dit, utiliser 204 état, mais comment puis-je faire à l'environnement GAE CGI sans webframework.

mise à jour 2:

Merci beaucoup, mais ... je vraiment besoin d'un moyen de CGI, sans façon WSGI. S'il vous plaît voir le commentaire dans mes codes.

def main() 
    #Block requests at once. 
    if (settings.BLOCK_DOWNLOAD and os.environ.get('HTTP_RANGE')) \ 
     or (settings.BLOCK_EXTENSION.match(os.environ['PATH_INFO'])): 
    #TODO: return 204 response in CGI way. 
    #I really do not need construct a WSGIApplication and then response a status code. 
    return 

    application = webapp.WSGIApplication([ 
    (r'/', MainHandler), 
    #... 
    ], debug=True) 
    run_wsgi_app(application) 


if __name__ == '__main__': 
    main() 

Répondre

4

Le code d'état HTTP est important dans la réponse

  1. Vous pouvez utiliser HTTP Aucun 204 à Responde avec un contenu vide.
  2. Vous pouvez utiliser 403 Interdit mais je préfère 204 pour faire une demande silencieuse
  3. Vous pourriez perdre la connexion, mais ce serait impoli et cela pourrait entraîner un blocage du serveur avec les connexions que l'utilisateur pourrait réessayer.

[Edit: question mise à jour]

Vous pouvez regarder beaucoup un des exemples sur SO marqués avec GAE:

Je crois comprendre que vous serez en utilisant le framework webapp. Bœuf sur son utilisation.

Vérifiez comment définir le code d'état de l'objet de réponse à

Voici un exemple de serveur d'os nu qui répond à 204 pas de contenu. Je ne l'ai pas testé, mais ce serait dans des lignes similaires.

import wsgiref.handlers 
from google.appengine.ext import webapp 
class MainHandler(webapp.RequestHandler): 
    def get(self): 
     return self.response.set_status(204) 

def main(): 
    application = webapp.WSGIApplication([('/', MainHandler)], debug=True) 
    wsgi.handlers.CGIHandler().run(application) 

if __name__ == '__main__': 
    main() 

Voir une demande complète à:

+0

merci. J'ai encore besoin de faire cela à l'environnement GAE CGI. –

+0

403 interdit a beaucoup plus de sens que 204 aucun corps. –

+0

@Nick Johnson: Oui, mais nous avons dû bloquer certains mauvais clients, nous avons utilisé 204 No Content – pyfunc