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

如何将HttpWebRequest代码迁移为HttpClient?时间戳计算报错求助

用HttpClient改写时间戳请求代码

下面是基于原逻辑,用HttpClient实现的完整代码:

public async Task<byte[]> GetTimeStampAsync(TimeStampModel model)
{
    // 生成时间戳请求(核心逻辑完全保留,避免计算偏差)
    var tsrq = new TimeStampRequestGenerator();
    tsrq.SetCertReq(model.certReq);
    var nonce = BigInteger.ValueOf(DateTime.Now.Ticks);
    var tsr = tsrq.Generate(model.digestMethod.Oid, model.hash, nonce);
    var requestData = tsr.GetEncoded();

    // 初始化HttpClient(建议在应用全局复用单例实例,此处为示例直接创建)
    using var httpClient = new HttpClient();
    
    // 添加Basic认证头(保持原编码逻辑)
    if (!string.IsNullOrEmpty(_user) && !string.IsNullOrEmpty(_password))
    {
        var authBytes = Encoding.Default.GetBytes($"{_user}:{_password}");
        httpClient.DefaultRequestHeaders.Authorization = 
            new AuthenticationHeaderValue("Basic", Convert.ToBase64String(authBytes, Base64FormattingOptions.None));
    }

    // 构造请求内容
    using var content = new ByteArrayContent(requestData);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/timestamp-query");

    // 发送POST请求
    using var response = await httpClient.PostAsync(_url, content);
    
    // 校验响应状态
    response.EnsureSuccessStatusCode();

    // 读取并解析响应流
    using var responseStream = await response.Content.ReadAsStreamAsync();
    using var bufferedStream = new BufferedStream(responseStream);
    var tsRes = new TimeStampResponse(bufferedStream);

    // 验证响应有效性
    tsRes.Validate(tsr);
    if (tsRes.TimeStampToken == null)
    {
        throw new Exception("服务器未返回任何时间戳");
    }

    return tsRes.TimeStampToken.GetEncoded();
}

针对时间戳计算错误的排查要点

  • 核心逻辑严格对齐:原代码中TimeStampRequestGenerator的调用、nonce生成(DateTime.Now.Ticks)、请求编码这部分是时间戳计算的核心,迁移时不要做任何修改,确保和原逻辑完全一致。
  • 配置信息一致:确认_url、_user、_password等参数和原代码完全相同,避免因请求目标或认证错误导致服务端返回异常响应,被误判为计算错误。
  • 对比请求数据:可以将原代码和新代码生成的requestData转为Base64字符串对比,确认请求体完全一致。
  • 流处理保持一致:保留原代码的BufferedStream处理逻辑,确保TimeStampResponse能正确读取响应流数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:25:39