2016-10-28 4 views
0

Мне нужно мое приложение Swift 2.1 для прослушивания HTTP-POST-сообщений, прибывающих на мою публичную конечную точку другой службой. Не знаете, как инициализировать GCDWebserver.GCDWebserver прослушивает HTTP POST

let webServer = GCDWebServer() 

Я пробовал:

webServer.addHandlerForMethod("POST", path: "https://myendpoint.com", 
    requestClass: GCDWebServerRequest.self, asyncProcessBlock: { request in 
    print("WebServer - POST detected") 
}) 
webServer.startWithPort(80, bonjourName: "Web Server") 

и

try! webServer.startWithOptions([GCDWebServerOption_BonjourName: "", GCDWebServerOption_BonjourType: "https://myendpoint.com", GCDWebServerOption_Port : 80, GCDWebServerOption_AutomaticallySuspendInBackground: false]) 

и

webServer.addHandlerForMethod("POST", path:"https://myendpoint.com", requestClass: GCDWebServerURLEncodedFormRequest.self, asyncProcessBlock: {request in 
    print("WebServer: POST captured") 
}) 
webServer.start() 

, но я не получаю нигде.

Независимо от того, что я пытаюсь, свойство URL указывает на мой localhost и publicURL, всегда равно нулю.

Любые советы?

+0

Обязательно прочтите «README», который поставляется вместе с GCDWebServer, поскольку он объясняет, как использовать его с примерами. – Pol

ответ

0
  1. Вы не можете запустить веб-сервер на порту 80 на устройстве iOS. Использование порта ниже 1024 требует привилегий root, которые у вашего приложения нет.

  2. Путь к веб-серверу не может содержать имя домена ... веб-сервер всегда будет связываться с адресом устройства .. вы просто добавляете URL-адрес конечной точки. "path" будет http://<yourdeviceip>:<port>/path

+0

получил, спасибо. – Polis

+1

Это на самом деле не так: вы можете открыть порт 80 на своем iPhone-приложении, не требуя никаких привилегий root. Прошло несколько лет с тех пор, как они это разрешили. – Pol

0

Ваша конфигурация не является правильным, идея позади этого является то, что приложение станет сам сервер, который можно настроить для приема входящих запросов.

В вашей addHandlerForMethod вы устанавливаете путь, чтобы быть «https://myendpoint.com»: это не имеет смысла.

Ваше приложение создаст новый сервер, поэтому он будет генерировать собственный URL-адрес сервера (который должен быть ip вашего устройства, за которым следует выбранный вами порт).

Я использую его с Swift 2.3, так что, вероятно, сам синтаксис немного отличается, но идея эта одна:

// Create the server 
let webServer = GCDWebServer() 

// Configure different paths 
let path = "/action" 
webServer.addHandlerForMethod("POST", path: action, requestClass: GCDWebServerRequest.self, asyncProcessBlock: { request in 
    print("WebServer - POST detected") 
    return GCDWebServerResponse(statusCode: 200) 
}) 

// Start server on port 8080 
webServer.startWithPort(8080, bonjourName: nil) 

// Print server url 
print("Server url: \(webServer.serverURL)") 

При такой конфигурации сервер будет иметь возможность получить запрос POST на пути

http://<your-device-ip>:8080/action 
+0

thx для очистки моего замешательства. идея «общедоступного» пути заключается в том, что все устройства, запускающие приложение, получат уведомление (т. е. получают POST), а не только один IP-адрес устройства. вот что я пытаюсь понять. есть ли способ сделать это? – Polis

+0

Я так не думаю, по крайней мере, не с этим компонентом: он создает веб-сервер, поэтому это означает, что каждый сервер на каждом устройстве уникален. Необходимо выполнить передачу широковещательного сообщения, но вам нужно реализовать другой протокол. –

+1

@Polis Вы не можете этого сделать, только запустив веб-сервер в своем приложении iPhone.Прежде всего сервер будет работать только в том случае, если приложение находится на переднем плане, а во-вторых, вам понадобится сервер для отслеживания работы iPhone с вашим приложением, а затем отправки запроса всем им. Используйте Apple push-уведомления или службу pub-sub, например https://pusher.com/ или https://www.pubnub.com/. – Pol

 Смежные вопросы

  • Нет связанных вопросов^_^