Ответ Python на HTTP-запрос
Я пытаюсь сделать что-то, что я предполагаю, очень просто, но поскольку я довольно новичок в Python, я не смог узнать, как это сделать. Мне нужно выполнить функцию в моем Python script, когда вызывается URL-адрес.
Например, я бы посетил следующий URL-адрес в моем браузере (192.168.0.10 - IP-адрес компьютера, на котором я запускаю script, и 8080 - это порт выбора).
http://192.168.0.10:8080/captureImage
Когда этот URL-адрес посещен, я хотел бы выполнить действие в моем Python script, в этом случае выполните функцию, которую я сделал.
Я знаю, что это может быть довольно просто, но я не смог узнать, как это можно сделать. Буду признателен за любую помощь!
Ответы
Ответ 1
Это действительно очень просто сделать в 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()
В зависимости от того, куда вы хотите перейти отсюда, вы можете проверить документацию для BaseHttpServer или заглянуть в более полную признакам веб-фреймворк, как Django.
Ответ 2
Один надежный способ выполнить то, что вам нужно, - использовать веб-фреймворк Python, Flask (http://flask.pocoo.org/). Есть видео Youtube, которые хорошо объясняют основы Flask (https://www.youtube.com/watch?v=ZVGwqnjOKjk).
Вот пример из моего детектора движения, который сообщает мне, когда моя кошка ждет у двери. Все, что нужно сделать для запуска этого кода, - это HTTP-запрос по адресу (в моем случае) 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 = [['[email protected]', 'Mark']] # Use your carrier 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 = '[email protected]'
password = 'yourGmailPassword'
app.run(host='0.0.0.0', threaded=True)