Cross Origin Anfrage blockiert?
Ich möchte gerade eine REST-API für mein Heimnetzwerk einrichten um über z.B. einen button einen CMD befehl auf dem Server PC auszuführen.
Mein Pythonscript für die API:
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/execute-command', methods=['POST'])
def execute_command():
# Hier wird der Code zum Ausführen des Befehls eingefügt
result = "Befehl wurde ausgeführt."
return jsonify({"response": result})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Mein HTML Script<!DOCTYPE html>
<html>
<head>
<title>API Test</title>
</head>
<body>
<button id="executeBtn">Befehl ausführen</button>
<script>
document.getElementById('executeBtn').addEventListener('click', function() {
fetch('http://localhost:5000/execute-command', { // Verwende absolute URL
method: 'POST',
})
.then(response => response.json())
.then(data => {
console.log(data);
})
.catch(error => {
console.error('Fehler:', error);
});
});
</script>
</body>
</html>
Ich bekomme als Fehler von Firefox in der Konsole:
Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf http://localhost:5000/execute-command. (Grund: CORS-Anfrage schlug fehl). Statuscode: (null).
Fehler: TypeError: NetworkError when attempting to fetch resource
Entschuldigung wenn es offensichtlich ist, bin da noch sehr frisch und habe keine Lösung gefunden.
1 Antwort
Mein Pythonscript (...)
Ich frage mich, wieso die Frage dann trotzdem mit Themen getaggt wurde (PHP, JQuery, CSS, node.js), die mit alldem eindeutig nichts zutun haben.
Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource (...)
Da die localhost-Adresse als externe Ressource gewertet wird, kann man wohl davon ausgehen, dass dein HTML-Dokument nicht über diese Adresse ausgespielt wird. Solche Anfragen auf eine fremde Adresse werden vom Browser üblicherweise direkt geblockt.
Da dein HTML-Dokument eine statische Ressource darstellt, sollte es im Unterverzeichnis <Dein Projektordner>/static liegen. Starte dein Skript (bzw. den Webserver) und rufe dann dein HTML-Dokument über
http://localhost:5000/static/<Name deines Dokuments>.html
auf.
Ich habe deinen Fall kurz getestet, es klappt auf jeden Fall. Die erwartete Rückmeldung nach Buttonklick erscheint in der Browserkonsole.