Javascript / Python - нажмите кнопку на веб-сайте и запустите функцию в python - PullRequest
0 голосов
/ 16 апреля 2020

В настоящее время 14:17, и я работаю над этим с 8 утра. Я обычно делаю python. Я хочу создать массив кнопок, в которых нажатие кнопки запускает функцию python на сервере. Я хочу сделать это, отправив веб-запрос от клиента javascript на сервер python, который получит его, проанализирует и выполнит правильную функцию. Я пробовал webhooks, websockets, ajax и ручной анализ запросов GET и POST. Я не могу заставить его работать, кажется, что в Интернете нет ничего о веб-хуках в python, python API веб-сокета настаивают на том, что вы используете asyn c и даже не работаете, я едва понимаю ajax, но это не не позволяю вам менять порты, и когда я пытаюсь вручную проанализировать запросы, все, что я получаю, это первоначальное соединение, и нажатие кнопки больше не отправляет.

Это моя последняя попытка на стороне клиента, получить запрос на разбор (Я хотел изменить порты или разобрать заголовки, но я получаю данные только тогда, когда сокеты в python сначала создают соединение, я ничего не получаю позже, когда нажимаю кнопку.)

<html>
<head>
<title>Dashboard v0.1</title>
<script>
    function send(theUrl)
    {
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open( "GET", theUrl, false);
        xmlHttp.send(null);
        return xmlHttp.responseText;
    }
</script>

<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>

</head>
<body>
    <button type="button" onclick="send("http://127.0.0.1:34000")">Test</button>
</body>
</html>

Это мой последняя попытка на стороне сервера:

from threading import *
from socket import *

server = socket(AF_INET, SOCK_STREAM)
Port = 34000

Host = ""
BufferSize = 2048
server.bind((Host, Port))
server.listen(1000)

while True:
    connection, address = server.accept()
    print("Accepted connection")

    while True:
        response = connection.recv(BufferSize).decode("utf8")
        print(str(response))

Пожалуйста, помогите. Я просто хочу отправить запрос. Честно говоря, мне не наплевать на безопасность, это в моей домашней сети. Я не знаю javascript, это все фрагменты кода.

1 Ответ

0 голосов
/ 16 апреля 2020

Я нашел ответ! Просто ответьте HTTP/1.1 200 OK, чтобы закрыть браузер. Вот моя реализация:

def listen(id, server):
    while True:
        client_connection, client_address = server.accept()
        request_data = client_connection.recv(1024)
        executeCommand(id)

        http_response = b"""\
    HTTP/1.1 200 OK
    """
        client_connection.sendall(http_response)
        client_connection.close()

        print(str(id))```
...