【发布时间】:2016-03-25 10:56:11
【问题描述】:
我必须向需要在 http 请求中进行基本身份验证的 WebService 发送 SOAP 消息,但我找不到方法。
经过搜索,我找到了一些解决方案和变通方法,但都没有奏效。
这是我的代码:
procedure TMyForm.HTTPRIOHTTPWebNode1BeforePost(
const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
UserName: string;
PassWord: string;
begin
UserName := 'aaa';
Password := 'bbb';
if not InternetSetOption(Data,
INTERNET_OPTION_USERNAME,
PChar(UserName),
Length(UserName)) then
raise Exception(SysErrorMessage(GetLastError));
if not InternetSetOption(Data,
INTERNET_OPTION_PASSWORD,
PChar(Password),
Length(Password)) then
raise Exception(SysErrorMessage(GetLastError));
end;
我尝试在 HTTPRIO.HTTPWebNode 中设置用户名和密码,但它会忽略它们,并且不会引发异常。 网络服务不断告诉我凭据丢失。
我设法在 c# 中做到了
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(uri);
Byte[] credentialBuffer = new UTF8Encoding().GetBytes("aaa:bbb");
request.Headers.Add("Authorization", string.Format("Basic {0}", Convert.ToBase64String(credentialBuffer)));
return request;
}
但我在 delphi 中找不到方法。
是我遗漏了什么还是我做错了什么?
我将 DelphiXE8 与 Firemonkey 一起使用。
【问题讨论】:
-
我认为你应该使用 OnBeforePost 处理程序,这样你就走在了正确的轨道上。你在关注论坛帖子吗?处理程序是否甚至被调用?添加日志记录。 forums.embarcadero.com/message.jspa?messageID=681097
-
顺便说一句,您是否有工具可以查看发生了什么?我在 Delphi 中使用 Fiddler 来查看正在发生的事情,并使用 SOAPUI 来测试“应有的调用”。比较两者通常会有所帮助,这里有一个使用这些stackoverflow.com/questions/13345474/… 的示例
-
这是另一个 BeforePost 示例 stackoverflow.com/questions/13345540/…
-
感谢cmets,我成功了。
标签: delphi http soap firemonkey delphi-xe8