Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / C# аналог данному PHP коду / 5 сообщений из 5, страница 1 из 1
17.02.2014, 11:03
    #38562732
Norix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# аналог данному PHP коду
Здравствуйте!
Помогите пожалуйста написать C# аналог данному запросу на PHP:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, " https://xml.foo.com/api"); // POST
curl_setopt($ch, CURLOPT_POST, 1); // POST
curl_setopt($ch, CURLOPT_POSTFIELDS, "people=shit"); // POST
curl_setopt($ch, CURLOPT_CAINFO, "/var/www/ssl/ca.crt"); // SSL
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // SSL
curl_setopt($ch, CURLOPT_SSLCERT, "/var/www/ssl/cert.crt"); // SSL
curl_setopt($ch, CURLOPT_SSLKEY, "/var/www/ssl/cert.key"); // SSL
curl_exec($ch);


В частности интересуют параметры CURLOPT_CAINFO, CURLOPT_SSLCERT, CURLOPT_SSLKEY.
В доки curl залез, погуглил, но как это сделать в C# не понял...
...
Рейтинг: 0 / 0
17.02.2014, 11:06
    #38562734
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# аналог данному PHP коду
а что делает этот код?
...
Рейтинг: 0 / 0
17.02.2014, 11:39
    #38562772
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# аналог данному PHP коду
Norix,

А в гугле cURL C# не набрать?
...
Рейтинг: 0 / 0
17.02.2014, 11:40
    #38562773
Norix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# аналог данному PHP коду
Составляется POST-запрос на https с использованием выданных сертификатов, получаем xml в качестве ответа.
Описание из документации по curl.

CURLOPT_URL - Url запроса.
CURLOPT_POST - Тип POST.
CURLOPT_POSTFIELDS - Тело POST запроса.
CURLOPT_CAINFO - Имя файла, содержащего один или более сертификатов, которые будут использованы при проверке подлинности удаленного сервера. Имеет значение только совместно с параметром CURLOPT_SSL_VERIFYPEER.
CURLOPT_SSL_VERIFYHOST - Задает проверку имени, указанного в сертификате удаленного сервера, при установлении SSL соединения. Значение 1 означает проверку существования имени, значение 2 - кроме того, и проверку соответствия имени хоста.
CURLOPT_SSLCERT - Имя файла с сертификатом в формате PEM.
CURLOPT_SSLKEY - Имя файла с закрытым ключом SSL.
...
Рейтинг: 0 / 0
17.02.2014, 12:13
    #38562807
Norix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# аналог данному PHP коду
ShSerge, вам для сведения: на форумы я обращаюсь в последнюю очередь. Частота обращений в профиле.

Я написал следующий код:

Код: c#
1.
2.
3.
4.
ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult;
var cert = new X509Certificate2("cert.crt"); // Используем чтобы проверить подлинность удалённого сервера  
byte[] data = ....;  
byte[] resp = PostForm("https://xml.foo.com/api", data, new X509Certificate2Collection() { cert });



Код: c#
1.
2.
3.
4.
public bool CheckValidationResult(object sender, X509Certificate certification, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
      return true;
}



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
protected byte[] PostForm(String url, byte[] data, X509Certificate2Collection authCerts)
        {
            try
            {
                var req = WebRequest.Create(url) as HttpWebRequest;
                req.ClientCertificates.AddRange(authCerts);
                req.ContentType = ContentTypeEnum.PureForm.ToString();
                req.Method = "POST";
                req.ContentLength = data.Length;

                using (var os = req.GetRequestStream())
                    os.Write(data, 0, data.Length);

                var resp = req.GetResponse() as HttpWebResponse;
                if (resp.StatusCode != HttpStatusCode.OK) throw new WebException("ошибка в ответе веб-сервиса");

                var respData = new byte[resp.ContentLength];
                using (var rs = resp.GetResponseStream())
                    rs.Read(respData, 0, (int)resp.ContentLength);

                return respData;
            }
            catch (Exception ex)
            {
                throw new Exception("Error", ex);
            }
        }




Я задействовал сертификат cert.crt, но в указанном PHP-коде кроме того используются сертификат для валидации сервера ca.crt и файл с приватным ключом cert.key .

Вопрос: в какие конструкции мне их задвинуть и желательно с примером...
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / C# аналог данному PHP коду / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]