Я пытаюсь выполнить вызов веб-службы с помощью веб-запроса HTTP в c#, Мой вызов curl выполнен успешно и выглядит следующим образом:
curl --cert cert.der --cert-type der --key keystore.pem --pass password https://xxx.xx.xx.xx:443/abcd/power/api --header "Authorization:Basic vsXNlckE6MTExMTEx" -H "Content-Type:application/json" -d partner.json -o output.dat -v -k
Когда я вызываю это, я получаю ожидаемый результат .
Ниже приведен мой код C#, который не работает и выдает ошибку.
//import file and create byte array
FileStream fs = File.OpenRead(folder + "cert.der");
byte[] buf = new byte[1024];
int c;
while ((c = fs.Read(buf, 0, buf.Length)) > 0)
{
Console.WriteLine(Encoding.UTF8.GetString(buf, 0, c));
}
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; });
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
// create X509Certificate
X509Certificate2 x509 = new X509Certificate2();
X509KeyStorageFlags x509KeyStorageFlags = new X509KeyStorageFlags();
x509.Import(buf, getSecureString(), x509KeyStorageFlags);
// create http web request and make a call
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Headers["Authorization"] = "Basic " +
Convert.ToBase64String(Encoding.Default.GetBytes("abcd:123456"));
httpWebRequest.KeepAlive = true;
httpWebRequest.ProtocolVersion = HttpVersion.Version10;
httpWebRequest.ClientCertificates.Add(x509);
httpWebRequest.PreAuthenticate = true;
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
Console.WriteLine(result);
}