2

我正在使用 gSOAP 2.8.15,我正在尝试按照 gsoap 文档 ( http://www.cs.fsu.edu/~engelen/soapdoc2.html#tth_sEc19的第 19.14 节中的说明来实现 HTTP 身份验证.14 )。

唯一的区别是文档中介绍的代码是用 C 编写的,但我是用 C++ 编写的。

这是我的 Web 服务客户端代码

// The variable wsp is a instance of web service proxy generated by soapcpp2.
// The proxy is a sub-class of the class soap
wsp.userid = "user";
wsp.passwd = "password";
// call the function of web service
wsp.get_version(&result);

在服务器端,我使用这些代码来检查身份验证:

// The variable wss is the a instance of web service service generated by soapcpp2. 
if (wss.userid == NULL || wss.passwd == NULL)
    //......

问题是当我使用客户端代码调用 Web 服务的功能时,用户 ID 和密码在服务器端始终为 NULL。但是当我通过使用抢先授权模式传递用户ID和密码来使用soapUI调用相同的函数时,服务器将毫无问题地获取信息。

如果有人可以帮助我解决问题,我将不胜感激。感谢您的关注。

4

1 回答 1

3

我使用tcpdump捕获了web服务服务器和客户端之间发送的包,我发现客户端调用web服务的函数时没有发送http头。于是我在gSOAP的文档中做了一番搜索,发现了这句话:

客户端可以使用 http:// 前缀。如果不存在,则不会发送 HTTP 标头,也不会将基于 HTTP 的信息传递给服务。

它解决了我的问题...

于 2013-08-21T10:05:48.043 回答