0

我需要我的 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 属性都指向我的本地主机,而 publicURL 总是为零。

有小费吗?

4

2 回答 2

0
  1. 您无法在 iOS 设备上的端口 80 上启动网络服务器。使用低于 1024 的端口需要您的应用程序没有的 root 权限。

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

于 2016-10-28T09:57:31.843 回答
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
于 2016-10-28T10:01:43.980 回答