Lazarus+Synapse+Ubuntu 12.04

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Lazarus+Synapse+Ubuntu 12.04

Сообщение wofs » 12.10.2014 18:56:22

Собственно не работает связка Lazarus(1.2.4)+Synapse(svn)+Ubuntu 12.04. Пример использования взят отсюда: http://wiki.freepascal.org/Synapse .
Наваял пробный проект, скомпилил - работать не хочет - HTTPSender.Resultcode возвращает 500.
Помогите разобраться с ситуацией.
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  httpsend;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

function DownloadHTTP(URL, TargetFile: string): Boolean;
// Download file; retry if necessary.
// Could use Synapse HttpGetBinary, but that doesn't deal
// with result codes (i.e. it happily downloads a 404 error document)
const
MaxRetries = 3;
var
HTTPGetResult: Boolean;
HTTPSender: THTTPSend;
RetryAttempt: Integer;
begin
Result := False;
RetryAttempt := 1;
HTTPSender := THTTPSend.Create;
try
  try
  // Try to get the file
  HTTPGetResult := HTTPSender.HTTPMethod('GET', URL);
  while (HTTPGetResult = False) and (RetryAttempt < MaxRetries) do
  begin
  Sleep(500 * RetryAttempt);
  HTTPGetResult := HTTPSender.HTTPMethod('GET', URL);
  RetryAttempt := RetryAttempt + 1;
  end;
  // If we have an answer from the server, check if the file
  // was sent to us.
  case HTTPSender.Resultcode of
  100..299:
  begin
  HTTPSender.Document.SaveToFile(TargetFile);
  Result := True;
  end; //informational, success
  300..399: Result := False; // redirection. Not implemented, but could be.
  400..499: Result := False; // client error; 404 not found etc
  500..599: Result := False; // internal server error
  else Result := False; // unknown code
  end;
  except
  // We don't care for the reason for this error; the download failed.
  Result := False;
  end;
  finally
  HTTPSender.Free;
  end;
  end;


{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  if DownloadHTTP('http://freepascal.ru/download/projects/GUI-mount.tar.gz','./GUI-mount.tar.gz') then
  ShowMessage('OK') else ShowMessage('False');
end;


end.



Добавлено спустя 1 час 10 минут 32 секунды:
Переписал проект на Curl - та же песня. Проблема в том,что приложение не может разрешить доменное имя (не видит dns сервера). Хотя другие приложения работают без проблем (тот же фаерфокс и т.п.).

Добавлено спустя 11 минут 28 секунд:
Создал файл /etc/resolv.conf:
Код: Выделить всё
nameserver 8.8.8.8
nameserver 8.8.4.4

все заработало как часы и synapse и curl.
Начал копать - оказывается в ubuntu 12.04 убрали (подозреваю что в других версиях так же) /etc/resolv.conf и разрешают имена доменов через группу утилит... ( http://forum.ubuntu.ru/index.php?topic=184435.0 ).
Отсюда вопрос - как, не имея прав root в системе заставить работать приложение с использованием synapse или curl?
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: Lazarus+Synapse+Ubuntu 12.04

Сообщение Ism » 12.10.2014 23:35:12

Тут 2 варианта, найти в Убунту утилиту или способ получить текущие dns сервера, это должно работать из под обычного пользователя
Использовать чтото типа яндекс dns и прописывать это в свойства объекта synapse
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Lazarus+Synapse+Ubuntu 12.04

Сообщение wofs » 13.10.2014 20:26:35

Ism писал(а):... прописывать это в свойства объекта synapse

А можно поподробнее, как это прописать? Покопался в исходниках и что-то не обнаружил данной возможности.
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: Lazarus+Synapse+Ubuntu 12.04

Сообщение Ism » 13.10.2014 22:04:25

Модуль synamisc функция GetDNS, можно туда подсунуть своё , извращение но может прокатить
Curl должен работать в Убунте, посмотрите .curlrc в папке юзера, что там прописано, попробуйте удалить, тогда curl должен работать
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Lazarus+Synapse+Ubuntu 12.04

Сообщение PapaNT » 14.10.2014 13:02:38

Использование в своей программе "железного" списка DNS является не самым удачным костылём. Дело в том, что при использовании такой программы из нормально защищённой локальной сети, доступ к внешним DNS-серверам будет обрезан по портам. Я обычно оставлял пользователям права на работу с портами 80, 443 и 8080.
Тут надо прочесть текущую конфигурацию.
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 239

Рейтинг@Mail.ru
cron