Python respond to HTTP Request

前端 未结 2 1460
走了就别回头了
走了就别回头了 2020-12-25 08:14

I am trying to do something that I assume is very simple, but since I am fairly new to Python I haven\'t been able to find out how. I need to execute a function in my Python

相关标签:
2条回答
  • 2020-12-25 08:50

    One robust way of accomplishing what you need is to use a Python web framework, Flask (http://flask.pocoo.org/). There are Youtube videos that do a good job of explaining Flask basics (https://www.youtube.com/watch?v=ZVGwqnjOKjk).

    Here's an example from my motion detector that texts me when my cat is waiting by the door. All that needs to be done to trigger this code is for an HTTP request at the address (in my case) http://192.168.1.112:5000/cat_detected

       from flask import Flask
       import smtplib
       import time
    
    
       def email(from_address, to_address, email_subject, email_message):
           server = smtplib.SMTP('smtp.gmail.com:587')
           server.ehlo()
           server.starttls()
           server.login(username, password)
           # For character type new-lines, change the header to read: "Content-Type: text/plain". Use the double \r\n.
           # For HTML style tags for your new-lines, change the header to read:  "Content-Type: text/html".  Use line-breaks <br>.
           headers = "\r\n".join(["from: " + from_address, "subject: " + email_subject,
                           "to: " + to_address,
                           "mime-version: 1.0",
                           "content-type: text/plain"])
           message = headers + '\r\n' + email_message
           server.sendmail(from_address, to_address, message)
           server.quit()
           return time.strftime('%Y-%m-%d, %H:%M:%S')
    
    
       app = Flask(__name__)
    
    
       @app.route('/cat_detected', methods=['GET'])
       def cat_detected():
           fromaddr = 'CAT ALERT'
           admin_addrs_list = [['YourPhoneNumber@tmomail.net', 'Mark']]  # Use your carrier's format for sending text messages via email.
           for y in admin_addrs_list:
               email(fromaddr, y[0], 'CAT ALERT', 'Carbon life-form standing by the door.')
           print('Email on its way!', time.strftime('%Y-%m-%d, %H:%M:%S'))
           return 'Email Sent!'
    
       if __name__ == '__main__':
           username = 'yourGmailUserName@gmail.com'
           password = 'yourGmailPassword'
           app.run(host='0.0.0.0', threaded=True)
    
    0 讨论(0)
  • 2020-12-25 08:52

    This is indeed very simple to do in python:

    import SocketServer
    from BaseHTTPServer import BaseHTTPRequestHandler
    
    def some_function():
        print "some_function got called"
    
    class MyHandler(BaseHTTPRequestHandler):
        def do_GET(self):
            if self.path == '/captureImage':
                # Insert your code here
                some_function()
    
            self.send_response(200)
    
    httpd = SocketServer.TCPServer(("", 8080), MyHandler)
    httpd.serve_forever()
    

    Depending on where you want to go from here, you might want to checkout the documentation for BaseHttpServer, or look into a more full featured web framework like Django.

    0 讨论(0)
提交回复
热议问题