Je veux envoyer une requête HTTP à Pepper de l'extérieur et l'utiliser comme déclencheur pour créer quelque chose de Pepper. Je vais vous expliquer comment réaliser une telle chose.
Cet article est destiné à ceux qui connaissent l'environnement de développement de Pepper, Choregraphe, et qui ont une certaine compréhension des programmes Python.
Pepper a une fonction de serveur Web en standard, et vous pouvez accéder aux ressources du dossier html de l'application à partir d'un PC, etc. à l'adresse http: //
Je souhaite recevoir une requête HTTP du côté Pepper et prendre des mesures. Dans un tel cas, vous devez préparer votre propre serveur Web. Que faire, Python a un module standard pour configurer un serveur Web simple, alors utilisons-le.
(La méthode présentée ici est simplement de savoir comment recevoir des requêtes HTTP au sein du réseau local. Pour que Pepper reçoive des requêtes HTTP directement via Internet, un mécanisme spécial est nécessaire à cette fin.)
J'ai fait un exemple de code. Apportez la boîte de script Python et modifiez le code à l'intérieur.
Vous trouverez ci-dessous le code de l'exemple de boîte de script Python.
python
import BaseHTTPServer
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
def onLoad(self):
self.httpd = None
def onUnload(self):
if self.httpd is not None:
self.httpd.shutdown()
self.httpd.server_close()
def onInput_onStart(self):
#Numéro de port pour recevoir la requête HTTP http://IP du robot:numéro de port/Recevez la demande à
PORT = 8000
MyHandler.setParent(self)
self.httpd = BaseHTTPServer.HTTPServer(('', PORT), MyHandler)
self.httpd.allow_reuse_address = True
self.httpd.serve_forever()
def onInput_onStop(self):
self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
self.onStopped(p) #activate the output of the box
# BaseHTTPServer.Appelé lorsqu'il y a une requête HTTP GET via BaseHTTPRequestHandler
#Le document suivant contient le contenu affiché dans l'objet http
# http://docs.python.jp/2/library/basehttpserver.html#BaseHTTPServer.BaseHTTPRequestHandler
def do_GET(self, http):
#Pour les demandes du navigateur, le favicon est distinct de la demande réelle.La demande à ico arrive, ignorez ceci
if http.path.endswith('favicon.ico'):
return;
self.logger.info("request url:" + http.path)
http.send_response(200)
http.send_header("Content-type", "text/plain")
http.end_headers()
http.wfile.write("This is a test response")
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
_parent = None
def do_GET(self):
MyHandler._parent.do_GET(self)
@staticmethod
def setParent(parent):
MyHandler._parent = parent
Après avoir exécuté l'application, essayez d'y accéder à partir d'un navigateur tel qu'un PC sur le même réseau local à l'adresse http: //
La fonction de serveur HTTP est réalisée à l'aide du module BaseHTTPServer. Dans cet exemple, nous attendons une requête sur le port 8000. Lorsque l'entrée onStart est appelée, elle déclenche le processus du serveur HTTP et attend la requête jusqu'à ce que la boîte soit déchargée. (Le déchargement se produit lorsque l'application est fermée, ou lorsque la boîte est à l'intérieur de la boîte de diagramme ou à l'intérieur de la boîte de chronologie, lorsque la boîte est supprimée.)
La requête est faite par l'instance de la classe MyHandler donnée au moment de l'instanciation de BaseHTTPServer.HTTPServer, mais je voulais la lier avec le traitement de la boîte
python
MyHandler.setParent(self)
À ce stade, je passe de force une instance de la boîte à la classe afin qu'elle puisse être traitée du côté de l'instance de la boîte. Méthode de la boîte
python
def do_GET(self, http):
Reçoit et traite les requêtes HTTP GET. Où self est l'instance de la boîte et http est l'instance de la classe BaseHTTPRequestHandler qui a reçu la demande.
python
self.logger.info("request url:" + http.path)
Pour le moment, affichez la partie chemin de l'URL de la requête dans le journal, puis
python
http.send_response(200)
http.send_header("Content-type", "text/plain")
http.end_headers()
http.wfile.write("This is a test response")
Génère une réponse HTTP.
Reportez-vous à l'URL suivante pour plus de détails sur le type d'informations contenues dans l'instance BaseHTTPRequestHandler.
http://docs.python.jp/2/library/basehttpserver.html#BaseHTTPServer.BaseHTTPRequestHandler
Cet exemple prend la forme de la génération par programme d'une réponse HTTP. Si vous souhaitez essentiellement renvoyer les fichiers dans le projet, l'implémentation est ajoutée en fonction de BaseHTTPRequestHandler classe SimpleHTTPRequestHandler du module SimpleHTTPServer Je pense que vous devriez utiliser .html). J'espère que vous pourrez essayer différentes choses ici en fonction de l'application.
Si Pepper peut recevoir des requêtes HTTP de manière dynamique, il sera plus facile de se lier à divers appareils dotés d'une interface du point de vue d'un client API Web. J'espère que cela vous aidera de nouvelles façons d'utiliser Pepper.
Recommended Posts