Я пытаюсь научиться создавать веб-приложение, и этому приложению нужны данные, сгенерированные из сценария python. Погуглив вокруг. Я нашел эту ссылку , и мне кажется, что мне нужно:
- написать приложение на стороне сервера в Python. Определите URL (маршрут), на котором выполняется ваш скрипт.
- в моем коде Javascript, сделайте HTTP-запрос к URL, определенному в шаге 1.
В моем java скрипт, у меня следующий ajax вызов, я не слишком уверен, что идет в поле URL:
$.ajax({
type: "get",
url: "http://localhost:5000",
cache: false,
async: "asynchronous",
dataType: "text",
success: function (data) {
//console.log(JSON.stringify(data));
console.log("---->" + data);
},
error: function (request, status, error) {
console.log("Error: " + error);
},
});
Что касается моего веб-сервера, я хотел написать его из сокетов, так как я хочу чтобы также научиться программированию сокетов, поэтому, следуя другой записи , я написал свой сервер ниже, на этом сервере моя цель - просто вернуть простую строку, чтобы доказать, что это работает, но в конечном итоге я хочу иметь возможность вернуть объект json:
import socket
import threading
import json
import pdb
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 5000))
sock.listen(1)
print("Listening at------>>> ", sock.getsockname())
connections = []
# Reply as HTTP/1.1 server, saying "HTTP OK" (code 200).
response_proto = 'HTTP/1.1'
response_status = '200'
response_status_text = 'OK' # this can be random
res_status = "{} {} {}".format(response_proto, response_status,
response_status_text)
response_body_raw = "hello world"
# Clearly state that connection will be closed after this response,
# and specify length of response body
response_headers = {
'Content-Type': 'text; encoding=utf8',
'Content-Length': len(response_body_raw),
'Connection': 'close',
}
response_headers_raw = ''.join('%s: %s\n' % (k, v) for k, v in
response_headers.items())
def handler(c, a):
global connections
while True:
data = c.recv(1024)
print(data)
for connection in connections:
# sending all this stuff
connection.sendall(res_status.encode('utf-8'))
connection.sendall('\n'.encode('utf-8'))
connection.sendall(response_headers_raw.encode('utf-8'))
# to separate headers from body
connection.sendall('\n'.encode('utf-8'))
connection.sendall(response_body_raw.encode('utf-8'))
if not data:
connections.remove(c)
c.close()
break
while True:
c, a = sock.accept()
print("Connected by------->>>", a)
cThread = threading.Thread(target=handler, args=(c, a))
cThread.daemon = True
cThread.start()
connections.append(c)
, когда я запускаю свой веб-сайт, используя расширение сервера VS Code Live, я получаю следующие ошибки:
Доступ к XMLHttpRequest в 'http://localhost: 5000 /? _ = 1586356660223 'от источника' http://127.0.0.1: 5500 'заблокировано политикой CORS: заголовок «Access-Control-Allow-Origin» отсутствует присутствует на запрошенном ресурсе.
GET http://localhost: 5000 /? _ = 1586356660223 net :: ERR_ FAILED
Я обнаружил ошибку No 'Access-Control-Allow-Origin', и мне кажется, что я не могу предоставить url в качестве localhost в моем вызове ajax. если нет, то что я должен указать в поле url, если я хочу общаться с моим локальным сервером?