Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / HTTP_2.0 / 5 сообщений из 5, страница 1 из 1
19.03.2018, 19:43
    #39617048
plus_stick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HTTP_2.0
Всем привет!
Кто-нибудь знает, как получить html сайта на протоколе http 2.0?
Обнаружил, что Indy не поддерживает 2.0. Где то услышал, NetHTTP может. Сделал так, без результата (AV):
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var
  h: TNetHTTPClient;
  r: TNetHTTPRequest;
begin
  h := TNetHTTPClient.Create(nil);
  r := TNetHTTPRequest.Create(nil);
  h.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36';
  r.Client := h;
  r.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8';
  r.AcceptEncoding := 'gzip, deflate, br';
  r.AcceptLanguage := 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7';
  r.URL := 'https://СайтНаHTTP2.com';
  r.MethodString := 'GET';
  Memo1.Text := r.Execute().ContentAsString();
end;

Интернет ничего не дал. Может есть у кого идеи? Спасибо.
...
Рейтинг: 0 / 0
19.03.2018, 19:48
    #39617052
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HTTP_2.0
plus_stickОбнаружил, что Indy не поддерживает 2.0.

Он же в исходниках идёт. В чём проблема посмотреть на код формирования запроса и
отрихтовать в нужную сторону?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.03.2018, 21:32
    #39617081
plus_stick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HTTP_2.0
Нашёл вот такой костыль в сети, заработало. Всем спасибо!
Код: pascal
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
program Project1;

{$APPTYPE CONSOLE}

uses
  System.Classes, IdHTTP, IdSSL, IdSSLOpenSSL, IdSSLOpenSSLHeaders, IdCTypes;

type
  TCustomIdHTTP = class(TIdHTTP)
  public
    constructor Create(AOwner: TComponent);
  private
    procedure OnStatusInfoEx(ASender: TObject; const AsslSocket: PSSL; const AWhere, Aret: TIdC_INT; const AType, AMsg: String);
  end;

{ TCustomIdHTTP }

constructor TCustomIdHTTP.Create(AOwner: TComponent);
begin
  IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  with IOHandler as TIdSSLIOHandlerSocketOpenSSL do begin
    OnStatusInfoEx := Self.OnStatusInfoEx;
    SSLOptions.Method := sslvSSLv23;
    SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_1, sslvTLSv1];
  end;
  inherited Create(AOwner);
end;

procedure TCustomIdHTTP.OnStatusInfoEx(ASender: TObject; const AsslSocket: PSSL; const AWhere, Aret: TIdC_INT;
  const AType, AMsg: String);
begin
  SSL_set_tlsext_host_name(AsslSocket, Request.Host);
end;
//////////////////

var
  MyHTTP: TCustomIdHTTP;
begin
  MyHTTP := TCustomIdHTTP.Create(nil);
  Memo1.text := MyHTTP.Get('https://СайтНаHTTP2.com')
  MyHTTP.Free;
end.
...
Рейтинг: 0 / 0
20.03.2018, 06:09
    #39617152
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HTTP_2.0
plus_stick,

похоже что проблема у тебя была не в http2, он обратно совместим с http, а в установке tls-соединения
...
Рейтинг: 0 / 0
20.03.2018, 11:02
    #39617317
plus_stick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HTTP_2.0
Дегтярев Евгений,

Верно. Достаточно было указать версию TLS:

Код: pascal
1.
2.
3.
  IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create;
  IdSSL.SSLOptions.Method := sslvTLSv1_2;
  IdHTTP.IOHandler := IdSSL;


Благодарю за наводку!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / HTTP_2.0 / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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