WinHttpAddRequestHeaders:在标头中发送证书时为 87 - C++

问题描述

我在尝试在标头中发送证书时遇到问题。这是我的代码

    PCCERT_CONTEXT pccertContext = GetCertificate();

    DWORD size = 0;
    CryptBinaryToString(pccertContext->pbCertEncoded,pccertContext->cbCertEncoded,CRYPT_STRING_BASE64,NULL,&size);

    LPTSTR dest = static_cast<LPTSTR> (HeapAlloc(GetProcessHeap(),HEAP_NO_SERIALIZE,size * sizeof(TCHAR)));

    CryptBinaryToString(pccertContext->pbCertEncoded,dest,&size);
    HeapFree(GetProcessHeap(),dest);

    HTTP_Request request(methods::GET);
    request.headers().add(L"client-certificate",dest);
    request.set_request_uri(getUri());
    client::http_client client(web::uri(StringUtils::ToWString(*url)),config);
    const auto response = client.request(request).get();

当我尝试提出请求时失败。感谢有关我哪里出错的任何帮助。谢谢!

解决方法

解决了这个问题。 dest 是一个多行字符串。这就是 http_request 拒绝标头的原因。做了以下修复:

    wstring ws(dest);
    ws.erase(remove(ws.begin(),ws.end(),'\r'),ws.end());
    ws.erase(remove(ws.begin(),'\n'),ws.end());

    // Send ws in the header instead
    http_request request(methods::GET);
    request.headers().add(L"client-certificate",ws);
    request.set_request_uri(getUri());
    client::http_client client(web::uri(StringUtils::ToWString(*url)),config);
    const auto response = client.request(request).get();