Пользовательский сбой соединения с сервером WSGI - PullRequest
0 голосов
/ 28 февраля 2011

Я новичок в Python WSGI и пытаюсь настроить свой собственный сервер для проверки моей страницы login.html (которая использует AJAX).

Но когда я запускаю свой WSGI.py (мой сервер, который я сделал с помощью учебника), я получаю эту ошибку:

Traceback (последний последний вызов):
Файл "C: \ Users \ Print \ Desktop \ Website \ KazCare \ wsgi.py", строка 63, в start_server ()
Файл "C: \ Users \ Print \ Desktop \ Website \ KazCare \ wsgi.py", строка 57, в start_server httpd = make_server ("", PORT, test_app)
Файл "C: \ Python27 \ lib \ wsgiref \ simple_server.py", строка 144, в make_server сервер = класс_сервера ((хост, порт), класс_хендера)
Файл "C: \ Python27 \ lib \ SocketServer.py", строка 408, в init self.server_bind ()
Файл "C: \ Python27 \ lib \ wsgiref \ simple_server.py", строка 48, в server_bind HTTPServer.server_bind (само)
Файл "C: \ Python27 \ lib \ BaseHTTPServer.py", строка 108, в server_bind SocketServer.TCPServer.server_bind (само)
Файл "C: \ Python27 \ lib \ SocketServer.py", строка 419, в server_bind self.socket.bind (self.server_address)
Файл "C: \ Python27 \ lib \ socket.py", строка 224, в мет return getattr (self._sock, name) (* аргументы)
ошибка: [Errno 10013] Была сделана попытка получить доступ к сокету способом, запрещенным его правами доступа

Что вы думаете, я делаю не так?

Вот мой сервер:

import threading
import webbrowser
from wsgiref.simple_server import make_server

FILE = 'frontend.html'
PORT = 8080

def test_app(environ, start_response):

    if environ['REQUEST_METHOD'] == 'POST':

        try:
            request_body_size = int(environ['CONTENT_LENGTH'])
            request_body = environ['wsgi.input'].read(request_body_size)
        except (TypeError, ValueError):
            request_body = "0"

        try:
            response_body = str(int(request_body) ** 2)
        except:
            response_body = "error"

        status = '200 OK'
        headers = [('Content-type', 'text/plain')]
        start_response(status, headers)
        return [response_body]

    else:
        response_body = open(FILE).read()
        status = '200 OK'
        headers = [('Content-type', 'text/html'), ('Content-Length', str(len(response_body)))]
        start_response(status, headers)
        return [response_body]

def open_browser():
    """Start a browser after waiting for half a second."""

    def _open_browser():
        webbrowser.open('http://localhost:%s/%s' % (PORT, FILE))
        thread = threading.Timer(0.5, _open_browser)
        thread.start()

def start_server():
    """Start the server."""
    httpd = make_server("", PORT, test_app)
    httpd.serve_forever()


if __name__ == "__main__":
    open_browser()
    start_server()

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Возможно, он уже используется чем-то другим.Попробуйте получить к нему доступ через веб-браузер как http://localhost:8080/ и посмотрите, что-нибудь откликнется.

1 голос
/ 28 февраля 2011

Я не думаю, что вы делаете что-то не так.Похоже, у вас нет прав на привязку к этому порту.Я знаю, что это может быть проблемой в * nix, и вам нужно работать как sudo, если вы хотите привязать к порту 80, например.Я не претендую на то, чтобы знать, как это работает в Windows, хотя.Попробуйте перейти на порт, обычно не связанный с HTTP (8888 или 9999), и посмотрите, работает ли он.Вы также можете попробовать запустить администратор.

...