Перейти к содержанию
Fire Monkey от А до Я
  • 0

Составление URL в HttpClient


rareMax

Вопрос

Можно ли в THTTPClient составлять адрес запроса в таком виде:

URI.Add('param','Name');

Что бы потом, например при GET запросе был такой адрес: examp.le/index.php?param=name

До этого все время пользовался конкатенацией строк либо через Format. Возможно кто то уже сталкивался с таким? Пробовал использовать THTTPRequest - но не подружился как то с ним.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

К сожалению тестировать THTTPRequest щас не могу, проблема с Delphi XE10. Не работает буилд с руганью на системный реестр. Переустанавливаю...

Изменено пользователем sviat
Ссылка на комментарий
  • 0

Ага, нашел, кажется

class function THello.AdvancedShort(const URL, APIkey: String;
  const AppID: Int64; Domen, Folder: String; AdvertType: TAdvertType): String;
var
  HTTP: THTTPClient;
  URI: TURI;
begin
  HTTP := THTTPClient.Create;
  try
    //---cut
    URI.AddParameter('key', APIkey);
    URI.AddParameter('uid', AppID.ToString);
    URI.AddParameter('url', URL);
    Result := HTTP.Execute('GET', URI).ContentAsString.Trim;
  finally
    HTTP.Free;
  end;
end;
Ссылка на комментарий
  • 0

К сожалению не работает... что я делаю не так?

          URI.Create(Main_URL + 'autorization_session');
          URI.AddParameter('login', TempLogin);
          URI.AddParameter('token', TempToken);
          URI.AddParameter('client', Client);
          URI.AddParameter('device', DeviceInfo.diDevice);
          ShowMessage(URI.ToString);

post-1145-0-96143200-1457878885_thumb.jp

Ссылка на комментарий
  • 0
А если так передавать параметры 
      sStream := TStringStream.Create();
      sList:=TStringList.Create;
      sList.Add('Lat='+Lat);
      sList.Add('Lon='+Lon);
      sList.Add('Alt='+Alt);
      aResponse:=aHttpClient.Post(sURL,sList,sStream);
Изменено пользователем Rusland
Ссылка на комментарий
  • 0

Я так делаю:

  sql_param:=TStringList.Create;
  sql_param.Add('fio_f='+reg2.suiEdit1.Text+'');   sql_param.Add('fio_i='+reg2.suiEdit2.Text+'');
  sql_param.Add('fio_o='+reg2.suiEdit3.Text +'');


-----куча других параметров------
  memo1.Lines.Add( form1.IdHTTP1.post( 'http://сайт/inet.php', sql_param ));

при этом в мемо1 получаю ответ

Ссылка на комментарий
  • 0
  • Модераторы

ну как по мне использовать TStringStream правильней, т.к. можно сразу указать кодировку.

а в запрос передавать TStringStream.DataString;

Ссылка на комментарий
  • 0

Насколько я понял это для пост запроса? Или для гет тоже пойдет?

 

 

А если так передавать параметры 
      sStream := TStringStream.Create();
      sList:=TStringList.Create;
      sList.Add('Lat='+Lat);
      sList.Add('Lon='+Lon);
      sList.Add('Alt='+Alt);
      aResponse:=aHttpClient.Post(sURL,sList,sStream);
Ссылка на комментарий
  • 0
  • Модераторы

 

а в запрос передавать TStringStream.DataString;

Как?

 

 

Как-то так

var
  Str: TStringStream;
  Return: string;
begin
  Str := TStringStream.Create('', TEncoding.UTF8);
  Str.WriteString('param=' + 'value&');
  Str.WriteString('param=' + 'value&');
  Str.WriteString('param=' + 'value&');
  Str.WriteString('param=' + 'value');
  Return := IdHTTP1.Get('http://mysite.com/request.php?' + Str.DataString);
  Str.Free;
end;

У меня для одно из приложении есть вспомогающий класс, который формирует (JSON) параметры для запроса

Вот так с ним работать

  OpenJSON('Installs');
  Param('inst_os', aDevInfo.diPlatform);
  Param('inst_ver', aDevInfo.diPlatformVer);
  Param('inst_arch', aDevInfo.diArchitecture);
  Param('inst_device', aDevInfo.diDevice);
  Param('inst_phis_screen', aDevInfo.diScreenPhis);
  Param('inst_logic_screen', aDevInfo.diScreenLogic);
  Param('inst_scale', aDevInfo.diScale.ToString);
  Param('inst_location', aLocation.ToString);
  Param('inst_acc_id', aAcc_id.ToString);

  Param('inst_mac', aDevInfo.diMacAddress);
  Param('inst_ip', aDevInfo.diIPAddress);
  Param('inst_lang', aDevInfo.diLang);
  CloseJSON;
  Result := ToJSON;
Изменено пользователем ZuBy
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...