You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Progress OpenEdge 11.7 HttpClient如何使用P12证书调用WebService?

使用Progress OpenEdge 11.7 HttpClient加载P12证书调用WebService

你之前的错误在于把cURL的命令行参数当成HTTP请求头来设置了——证书相关的配置属于SSL/TLS层的设置,不是HTTP请求头的一部分,所以直接加Header肯定无效。下面是用OpenEdge HttpClient实现该需求的正确方式:

核心思路

通过ClientLibraryBuilder配置SSL上下文,直接加载P12格式的客户端证书,而不是通过请求头传递证书信息。

完整示例代码

DEFINE VARIABLE oLib        AS HttpClientLibrary NO-UNDO.
DEFINE VARIABLE oHttpClient AS HttpClient NO-UNDO.
DEFINE VARIABLE oRequest    AS HttpRequest NO-UNDO.
DEFINE VARIABLE oResponse   AS HttpResponse NO-UNDO.
DEFINE VARIABLE lcP12Path   AS CHARACTER NO-UNDO. /* P12证书的完整路径 */
DEFINE VARIABLE lcP12Pass   AS CHARACTER NO-UNDO. /* P12证书的密码 */
DEFINE VARIABLE lcXmlContent AS CHARACTER NO-UNDO. /* 要上传的XML内容 */
DEFINE VARIABLE lcUrl       AS CHARACTER NO-UNDO. /* 目标WebService地址 */
DEFINE VARIABLE lcFiche     AS CHARACTER NO-UNDO. /* 你的文件前缀变量 */

/* 1. 配置SSL上下文,加载P12证书 */
oLib = ClientLibraryBuilder:Build()
            :sslVerifyHost(NO) /* 对应cURL的-k参数,禁用主机名验证 */
            :SetClientCertificate(lcP12Path, lcP12Pass, "PKCS12") /* 指定证书路径、密码和格式 */
            :LIBRARY.

/* 2. 构建配置好SSL的HttpClient */
oHttpClient = ClientBuilder:Build():UsingLibrary(oLib):Client.

/* 3. 读取要上传的XML文件内容 */
lcXmlContent = FILE-INFO(lcFiche + ".xml"):FILE-CONTENT.

/* 4. 构建POST请求,设置XML内容和Content-Type */
oRequest = RequestBuilder:Post(lcUrl, lcXmlContent)
            :AddHeader("Content-Type", "application/xml;charset=UTF-8")
            :Request.

/* 5. 执行请求并获取响应 */
oResponse = ResponseBuilder:Build():Response.
oHttpClient:Execute(oRequest, oResponse).

/* 6. 处理响应:写入文件(对应cURL的-o参数)+ 状态判断 */
IF oResponse:StatusCode = 200 THEN DO:
    OUTPUT TO VALUE(lcFiche + "out.xml").
    PUT UNFORMATTED oResponse:ResponseBody.
    OUTPUT CLOSE.
    MESSAGE "请求完成,响应已写入文件" VIEW-AS ALERT-BOX.
END.
ELSE DO:
    MESSAGE "请求失败,状态码:" oResponse:StatusCode "错误信息:" oResponse:ReasonPhrase VIEW-AS ALERT-BOX.
END.

/* 清理资源 */
oHttpClient:Release().
oLib:Release().

关键说明

  • SetClientCertificate是核心方法:第三个参数指定证书格式为PKCS12(对应P12文件),直接加载完整的P12证书,不需要像cURL那样拆分成pem证书和密钥文件。
  • sslVerifyHost(NO)对应你cURL命令里的-k,如果目标服务器的CA证书是可信的,建议改为YES启用主机名验证,提升安全性。
  • 读取XML内容时,FILE-INFO会保留文件原有编码,确保和接口要求的UTF-8一致。

补充:添加CA证书验证(对应cURL的--cacert)

如果目标服务器需要指定CA证书来验证,可在配置SSL上下文时添加:

oLib = ClientLibraryBuilder:Build()
            :sslVerifyHost(YES)
            :SetCACertificate(lcpemCacert) /* 传入CA证书文件路径 */
            :SetClientCertificate(lcP12Path, lcP12Pass, "PKCS12")
            :LIBRARY.

内容的提问来源于stack exchange,提问作者Raulitop 128

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:55:19