问题描述
我在尝试在标头中发送证书时遇到问题。这是我的代码
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();