Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 13.03.2020, 15:09   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 680
По умолчанию не удается послать GET запрос

Здравствуйте.
Сегодня обнаружил, что моя программа перестала посылать GET запросы на твич.
Сначала подумал, что твич опять изменил API, но потом проверил в Postman'е - всё работает.
Код:
function Https_Get(sURL : string; var RecvText : AnsiString) : Integer;
const
  sUserAgent = 'Mozilla/5.001 (windows; U; NT4.0; en-US; rv:1.0) Gecko/25250101pp';
  TWITCH_V5_ACCEPT : string = 'application/vnd.twitchtv.v5+json';
  TWITCH_CLIENT_ID : string = 'kimne78kx3ncx6brgo4mv6wki5h1ko';
var
  hInet, hConnect, hRequest : HINTERNET;
  lpdwBufferLength: DWORD;
  lpdwReserved    : DWORD;
  lpdwNumberOfBytesAvailable : DWORD;
  b, _pos : Cardinal;
  ServerName, Resource : string;
  Header : String;
  ResponseText : AnsiString;
  p : PChar;
begin
  Result := -1;
  _pos := Pos('://', sURL);
  Header := Copy(sURL, 1, _pos + 2);
  Delete(sURL, 1, _pos + 2);
  _pos := Pos('/', sURL);
  ServerName := Copy(sURL, 1, _pos - 1);
  Delete(sURL, 1, _pos - 1);
  Resource := sURL;
  hInet := InternetOpen(PChar(sUserAgent), INTERNET_OPEN_TYPE_PRECONFIG,
                        nil, nil, 0);
  if Assigned(hInet) then
  begin
    hConnect := InternetConnect(hInet, PChar(ServerName),
                  INTERNET_DEFAULT_HTTPS_PORT, nil, nil,
                  INTERNET_SERVICE_HTTP, 0, 0);
    if Assigned(hConnect) then
    begin
      p := PChar('Accept: ' + TWITCH_V5_ACCEPT + #0);
      hRequest := HttpOpenRequest(hConnect, 'GET', PChar(Resource),
                  HTTP_VERSION, '', @p, INTERNET_FLAG_SECURE, 0);
      if Assigned(hRequest) then
      begin
        Header := 'Client-ID: ' + TWITCH_CLIENT_ID;
        if not HttpSendRequest(hRequest, PChar(Header), Length(Header), nil, 0) then
        begin
          InternetCloseHandle(hRequest);
          InternetCloseHandle(hConnect);
          InternetCloseHandle(hInet);
          Exit;
        end;

        lpdwBufferLength := SizeOf(dword);
        lpdwReserved := 0;
        if not HttpQueryInfo(hRequest,
                             HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER,
                             @result, lpdwBufferLength, lpdwReserved) then
        begin
          InternetCloseHandle(hRequest);
          InternetCloseHandle(hConnect);
          InternetCloseHandle(hInet);
          Exit;
        end;

        if Result = 200 then
        begin
          _Pos := 1;
          ResponseText := '';
          repeat
            if not InternetQueryDataAvailable(hRequest,
                                lpdwNumberOfBytesAvailable, 0, 0) then
            begin
              InternetCloseHandle(hRequest);
              InternetCloseHandle(hConnect);
              InternetCloseHandle(hInet);
              Exit;
            end;
            SetLength(ResponseText, Length(ResponseText) +
                           Integer(lpdwNumberOfBytesAvailable));
            InternetReadFile(hRequest, @ResponseText[_pos],
                            lpdwNumberOfBytesAvailable, b);
            Inc(_Pos, b);
          until b = 0;
          RecvText := ResponseText;
        end;
        InternetCloseHandle(hRequest);
      end;
      InternetCloseHandle(hConnect);
    end;
    InternetCloseHandle(hInet);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  a : AnsiString;
begin
  //не работает
  if Https_Get('https://api.twitch.tv/kraken/users?login=miramisu', a)=200 then
  ShowMessage(a);
  //работает
  if Https_Get('https://google.com/kraken/users?login=miramisu', a)=200 then
  ShowMessage(a);

end;
валится в FALSE на строчке
Код:
        if not HttpSendRequest(hRequest, PChar(Header), Length(Header), nil, 0) then
почему?
BLACK_RAIN вне форума Ответить с цитированием
Старый 14.03.2020, 17:29   #2
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 680
По умолчанию

на форуме твича сказали, что это какие-то проблемы с сервером. Сегодня ночью всё снова заработало.
Кстати, код на си-шарпе при этом работал.
BLACK_RAIN вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не удается послать текст в особом случае от клиента серверу. alextrof94 Общие вопросы Delphi 7 26.11.2013 22:01
послать запрос php скрипту spydark91 Общие вопросы Delphi 8 01.10.2011 17:26
Послать запрос с изменённым cookies на сервер Человек_Борща Работа с сетью в Delphi 9 03.06.2011 12:16
Как послать запрос HTTP 1.1 Izhic Работа с сетью в Delphi 0 07.12.2009 08:21
как послать http-запрос? Johnson Работа с сетью в Delphi 2 06.11.2009 14:28


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS