Я пишу приложение на Python, которое взаимодействует с API Google и требует аутентификации пользователя через oauth2.
В настоящее время я настраиваю локальный сервер аутентификации для получения кода аутентификации oauth2 от oauth-сервера Google, в основном выполняю танец oauth, как this .
Обычно он работает довольно хорошо, но, думаю, я не совсем понимаю, как он взаимодействует с моими портами, потому что он с радостью назначит мой локальный сервер аутентификации для работы на порте 8080, даже если какое-то другое приложение (в случае моего тестирование, SABNzbd ++) использует этот порт.
Я думал, что назначение порта для используемого номера порта приведет к ошибке и повторной попытке. Что я делаю неправильно (или, наоборот, что делает SABNzbd ++, который скрывает тот факт, что он прослушивает порт 8080, скрытый от моего приложения?)
Соответствующий код выглядит следующим образом.
import socket
import BaseHTTPServer
from oauth2client.tools import ClientRedirectServer, ClientRedirectHandler
port_number = 0
host_name = 'localhost'
for port_number in range(8080,10000):
try:
httpd = ClientRedirectServer((host_name, port_number),
ClientRedirectHandler)
except socket.error, e:
print "socket error: " + str(e)
pass
else:
print "The server is running on: port " + str(port_number)
print "and host_name " + host_name
break
Чтобы уточнить, ниже приведены мои ожидаемые результаты
socket error: [port already in use] (or something like that)
The server is running on: port 8081
and host_name localhost
и затем переход к localhost: 8080 разрешается в SABnzbd +, а localhost: 8081 разрешается к моему серверу аутентификации.
Я получаю, однако:
the server is running on: port 8080
and host_name localhost
но при переходе на localhost: 8080 разрешается в SABNzbd +
Заранее спасибо!