GCDWebserver监听HTTP POST

时间:2016-10-28 05:44:55

标签: ios swift http endpoint gcdwebserver

我需要我的Swift 2.1应用程序来侦听由另一个服务到达我的公共端点的HTTP POST。不知道如何初始化GCDWebserver。

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总是为零。

任何提示?

2 个答案:

答案 0 :(得分:0)

  1. 您无法在iOS设备上的端口80上启动网络服务器。使用1024以下的端口需要您的应用程序不具备的root权限。

  2. 网络服务器路径不能包含域名...网络服务器将始终绑定到设备的地址...您只需添加端点的网址即可。 "path"将为http://<yourdeviceip>:<port>/path

答案 1 :(得分:0)

您的配置不正确,其背后的想法是您的应用程序成为服务器本身,您可以配置为接受传入请求。

addHandlerForMethod中,您设置的路径为&#34; https://myendpoint.com&#34; :它没有意义。

您的应用程序将创建一个新服务器,因此它将生成自己的服务器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