我正在开发一个基于使用gsoap v2.8的网络服务器(FCGI)。 该网络服务器应响应传入的 HTTP GET 请求,但它不起作用。
我知道 gsoap 提供了 HTTP 回调来实现这一点,在我的例子中,我使用soap->fget 回调。 我浏览了 gsoap 文档,并且遵循相同的做法。
我知道每当有传入的 HTTP GET 请求时,soap_serve(由 gsoap 生成)函数将调用 fget 回调函数,但我看到我的函数 http_get 没有被命中,soap_serve 返回 -1 并显示错误消息“Response-Header” : HTTP/1.1 500 内部服务器错误 服务器:“
我不确定是否需要在我的代码中更正/添加任何内容来处理我的网络服务器的 HTTP GET 请求。
任何快速回复都会对我很有帮助。 预先感谢您。
使用 FCGI 或 CGI 时不会调用
fget()
回调,因为 HTTP 标头已从入站消息中剥离。因此,soap_serve()
默认假设这是一个 POST 请求。要响应 GET 请求,请勿立即调用 soap_serve()
。检查环境变量REQUEST_METHOD
是否为GET
,然后产生相应的输出。检查环境变量 PATH_INFO
或 PATH_TRANSLATED
和 QUERY_STRING
是否与您的服务应响应的 URL 匹配。切勿返回服务器上由 PATH_INFO
或 QUERY_STRING
标识的文件,这是存在安全风险的。仅返回应公开可见的文件或输出。