Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

NetObjectToIDispatch45 HTTP запросы Basic auth

NetObjectToIDispatch45 HTTP запросы Basic auth
Я
   San4opa
 
02.06.20 - 23:38
Добрый день

Пробую отправить запрос на сервер с Basic auth через NetObjectToIDispatch45

кто-нибудь знает как пройти авторизацию правильно, пытаюсь делать через обработчик handler но похоже не то, сервер не отвечает.

    uriSources = Объект.АдресСервера+"/score/sync";
    requestUri = "";
    
    NetObject = Новый COMОбъект("NetObjectToIDispatch45");
    HttpClient = NetObject.ПолучитьТипИзСборки("System.Net.Http.HttpClient","System.Net.Http.dll");
    HttpClientHandler = NetObject.ПолучитьТип("System.Net.Http.HttpClientHandler");
    handler = NetObject.СоздатьОбъект(HttpClientHandler);
    
    NetworkCredential = NetObject.СоздатьОбъект("System.Net.NetworkCredential");
    NetworkCredential.UserName = Объект.Логин;
    NetworkCredential.Password = Объект.Пароль;
    
    handler.Credentials = NetworkCredential;
    handler.UseDefaultCredentials = Истина;
    Client = NetObject.СоздатьОбъект(HttpClient,handler);
    
    uri = NetObject.СоздатьОбъект("System.Uri",uriSources);
    Client.BaseAddress = uri;
    Данные = Новый Структура();
    
    Данные.Вставить("inn","6140038703");
    
    СтрокаJSON = Плейн_РаботаСHTTP.ПолучитьСтрокуJSON(Данные);
    ПараметрыЗапросаNetObject = NetObject.ОбернутьЛюбойОбъект(СтрокаJSON);

    StringContent = NetObject.ПолучитьТип("System.Net.Http.StringContent");
    Контент = NetObject.СоздатьОбъект(StringContent,ПараметрыЗапросаNetObject);

    Результат = Client.PostAsync(requestUri,Контент).Result;    
    //Result = Результат.Content.ReadAsStringAsync().Result;
   Serginio1
 
1 - 03.06.20 - 13:22
Если ты используешь HTTPClient то проще через заголовки client.DefaultRequestHeaders.Authorization 
https://stackoverflow.com/questions/14627399/setting-authorization-header-of-httpclient

public static class HttpClientExtentions
    {
        public static AuthenticationHeaderValue ToAuthHeaderValue(this string username, string password)
        {
            return new AuthenticationHeaderValue("Basic",
        Convert.ToBase64String(
            System.Text.Encoding.ASCII.GetBytes(
                $"{username}:{password}")));
        }
    }
Usage:
using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Authorization = _username.ToAuthHeaderValue(_password); 
}
   Serginio1
 
2 - 03.06.20 - 15:05
Единственно что вместо System.Text.Encoding.ASCII.GetBytes
лучше использовать 
System.Text.UTF8Encoding.UTF8.GetBytes( Объект.Логин+":"+Объект.Пароль)
   San4opa
 
3 - 05.06.20 - 04:32
(1) Спасибо, пробуем но пока не получается. Наверное дело не в авторизации.
   San4opa
 
4 - 05.06.20 - 15:49
(2) Уже все перепробовали может Вы подскажете, запрос не отправляется к серверу, хотя тестируем из Postman всё работает. ИЗ 1с получаем вот такую ошибку: https://drive.google.com/file/d/1khvt_6B0zKjEbyvuOme67h-_4s7qMrcM/view?usp=sharing
адрес сервера указываем https.
   Вафель
 
5 - 05.06.20 - 15:52
тут наверняка авторизация по кукисам
   San4opa
 
6 - 05.06.20 - 20:02
(5) Про авторизацию писал как раз там не по кукам, но все равно пробовали.
   Serginio1
 
7 - 06.06.20 - 00:27
Ну можешь попробовать использовать куки

// Вставить содержимое обработчика.
    cookieContainer = Врап.СоздатьОбъект("System.Net.CookieContainer");
    
  handler=Врап.СоздатьОбъект(HttpClientHandler);
  handler.AutomaticDecompression=Врап.OR(DecompressionMethods.GZip,DecompressionMethods.Deflate) ;
  handler.CookieContainer=cookieContainer;

Клиент = Врап.СоздатьОбъект(HttpClient,handler);
    uriSources ="http://www.telerik.com";;
    Ури=Врап.СоздатьОбъект("System.Uri",uriSources);
    Клиент.BaseAddress =Ури;

Посмотри какие куки заголовки итд
   Serginio1
 
8 - 06.06.20 - 00:29
   Serginio1
 
9 - 06.06.20 - 00:35
Попробуй
https://ru.stackoverflow.com/questions/480370/Как-исправить-Не-удалось-создать-защищенный-канал-ssl-tls

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
   San4opa
 
10 - 06.06.20 - 05:05
(9) Спасиба, будем пробовать.
   Serginio1
 
11 - 06.06.20 - 15:28
Там должно типа
ServicePointManager=врап.ПолучитьТип("System.Net.ServicePointManager");
SecurityProtocolType=врап.ПолучитьТип("System.Net.SecurityProtocolType");
ServicePointManager.SecurityProtocol = Врап.OR(SecurityProtocolType.Ssl3 , SecurityProtocolType.Tls , SecurityProtocolType.Tls11 , SecurityProtocolType.Tls12);
   San4opa
 
12 - 06.06.20 - 21:39
(11) Круто, получилось, спасиба.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.