Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2012, 14:17   #1
Navado
Юный Дельфист
Пользователь
 
Аватар для Navado
 
Регистрация: 23.02.2010
Сообщений: 13
По умолчанию Как сделать счтывание прокси из ini файла

Как сделать считывание прокси из ini файла при старте программы и при нажатии на кнопку Button2(что бы при нажатии считывалось рандомно из списка)? Вот код программы, подскажите как сделать :
PHP код:
unit Unit1;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsOleCtrlsSHDocVwStdCtrlsExtCtrlsIniFilesWinInetUrlMon,
  
ComCtrlsShlObj;

type
  TForm1 
= class(TForm)
    
Panel1TPanel;
    
Panel2TPanel;
    
Edit1TEdit;
    
Button1TButton;
    
WebBrowser1TWebBrowser;
    
Button3TButton;
    
Edit2TEdit;
    
Label1TLabel;
    
Button2TButton;
    
StatusBar1TStatusBar;
    
procedure Edit1KeyDown(SenderTObject; var KeyWord;
      
ShiftTShiftState);
    
procedure Button1Click(SenderTObject);
    
procedure Button3Click(SenderTObject);
    
procedure Button2Click(SenderTObject);
    
procedure WebBrowser1DownloadBegin(SenderTObject);
    
procedure WebBrowser1DownloadComplete(SenderTObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  protected
   
Procedure FindAddress;
   
Procedure ChangeProxy;
   
Procedure Dell_Cookie;
  
end;

var
  
Form1TForm1;  PIInfo PInternetProxyInfo;

implementation

{$R *.dfm}

procedure TForm1.Dell_Cookie;
var
 
DirInfoTSearchRec;
 
rinteger;
 
dirstring;
begin
SetLength
(dirMAX_PATH);
if 
not SHGetSpecialFolderPath(CSIDL_COOKIESPChar(dir), CSIDL_COOKIEStrue)
then begin showmessage('каталог с cookies не найден :('); exit; end;
dir:=Pchar(dir)+'\';
r := FindFirst(dir+'
*.*', FaAnyfile, DirInfo);
 while r = 0 do begin
   if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
      (DirInfo.Attr and FaVolumeId <> FaVolumeID))
   then
     if not DeleteFile(pChar(dir + DirInfo.Name)) then
       ShowMessage('
не могу удалить файл  '+DirInfo.Name);
   r := FindNext(DirInfo);
 end;
 SysUtils.FindClose(DirInfo);
end;

procedure TForm1.ChangeProxy;
begin
New(PIInfo);
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
PIINfo^.lpszProxy := PChar(Edit2.Text);
PIInfo^.lpszProxyBypass := PChar('');
UrlMkSetSessionOption(INTERNET_OPTION_PROXY, PIInfo, SizeOf(INTERNET_PROXY_INFO), 0);
Dispose(PIInfo);

end;


procedure TForm1.FindAddress;
begin
 WebBrowser1.Navigate(WideString(Edit1.Text));
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 If Key = VK_Return Then
  Begin
   FindAddress;
  End;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 FindAddress;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 WebBrowser1.Refresh;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Dell_Cookie;
 ChangeProxy;
end;

procedure TForm1.WebBrowser1DownloadBegin(Sender: TObject);
begin
 StatusBar1.SimpleText := '
Загрузка';
end;

procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);
begin
 StatusBar1.SimpleText := '
Готово';
end;

end. 
Navado вне форума Ответить с цитированием
Старый 07.12.2012, 14:40   #2
Larboss
Недо
Участник клуба
 
Регистрация: 11.08.2011
Сообщений: 1,394
По умолчанию

Вижу, вы код содрали откуда-то. От ini видно только то, что в uses есть inifiles.

Для исполнения участка кода при старте программы обычно используют процедуру FormCreate - срабатывает при создании формы. Вот в нее и пишите код считывания из ini. Как работать с ini? - Пользуйтесь поиском...

Для рандомизации обычно используют Random(). А "рандомить" вам надо будет некий число-признак, по которому будете делать выбор прокси.
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Larboss вне форума Ответить с цитированием
Старый 07.12.2012, 15:16   #3
Navado
Юный Дельфист
Пользователь
 
Аватар для Navado
 
Регистрация: 23.02.2010
Сообщений: 13
По умолчанию

Ini файл я убрал пока что из кода. С ним я более менее умею работать. При считывании происходит ошибка. Ведь прокси содержит знаки : и . Просьба пояснить про "число-признак"
Navado вне форума Ответить с цитированием
Старый 07.12.2012, 15:30   #4
Larboss
Недо
Участник клуба
 
Регистрация: 11.08.2011
Сообщений: 1,394
По умолчанию

Цитата:
Ini файл я убрал пока что из кода.
Цитата:
При считывании происходит ошибка
А как вам можно помочь, если проблемное место вы убрали из кода? Какая ошибка? Где конкретно?

А как у вас в ini-файле хранится список прокси?


Цитата:
Ведь прокси содержит знаки : и
Откуда там "и" не пойму...

Цитата:
Просьба пояснить про "число-признак"
Код:
...
Random(CountOfProxy);
Case CountOfProxy of
1: // Если выпадет рандомно 1, то будет выбран соот. прокси,
2: // и код "выбора" описывается здесь, после 1: или 2: и тд,
3: // 1: <выбор прокси>
end;
...
Смысл понятен?
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Larboss вне форума Ответить с цитированием
Старый 07.12.2012, 16:18   #5
Navado
Юный Дельфист
Пользователь
 
Аватар для Navado
 
Регистрация: 23.02.2010
Сообщений: 13
По умолчанию

Вы не так поняли. Я имелл виду символы : (двоеточие) . (точка) "И" это был просто предлог.
Прокси хранятся в виде
PHP код:
93.157.44.25:3128 
 93.152.175.16
:8080 
 93.152.175.1
:8080 
 91.228.53.28
:8080 
 91.228.53.28
:3128 
 91.221.176.163
:3128 
 91.187.117.11
:8087 
 91.121.27.218
:3128 
 91.121.202.135
:3128 
 91.121.11.120
:8080 
Я пишу так:
PHP код:
procedure TForm1.FormCreate(SenderTObject);
begin
  IniFile 
:= TIniFile.Create('proxy.ini');
  
//Edit2 - поле, в которое должен писаться прокси из файла
  
Edit2.Text := IniFile.ReadString(какие тут параметры указать нужно?);
end
Navado вне форума Ответить с цитированием
Старый 07.12.2012, 16:36   #6
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

А с чего Вы взяли, что указанный Вами файл это INI-файл? 0_о
Обычный текстовый файл как я погляжу.
FaTaL вне форума Ответить с цитированием
Старый 07.12.2012, 16:36   #7
Larboss
Недо
Участник клуба
 
Регистрация: 11.08.2011
Сообщений: 1,394
По умолчанию

Цитата:
93.157.44.25:3128
Коли работали с ini-файлами, то обновите в памяти еще раз внимательно их структуры.

Выглядит список по другому в ini файле...

Вот так, например:
Код:
[Proxy_List]
Proxy1=93.157.44.25:3128
Proxy2=93.152.175.16:8080
Proxy3=93.152.175.1:8080
В чем проблема при считывании? - Считали строку, затем эту строку обрабатываете, чтобы выделить в отдельные строки значение IP-адреса прокси-сервера и отдельно порт. Думаю, нет необходимости рассказывать как работать со строкой. Просто часть строки до знака ":" кидать в одну строку, а часть после в другую. Разделение такое необходимо, если адрес и порт в разные поля надо прописывать.

Считает первый в списке прокси, без обработки строки. Если считать не удастся, то Proxy_list[1] примет значение "NIL".
Код:
 Proxy_List[1] := IniFile.ReadString('Proxy_List','Proxy1','NIL');
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Larboss вне форума Ответить с цитированием
Старый 07.12.2012, 16:41   #8
Navado
Юный Дельфист
Пользователь
 
Аватар для Navado
 
Регистрация: 23.02.2010
Сообщений: 13
По умолчанию

Сори. я забыл вставить блоки [] в ini файле.

Код:
[Proxy_List]
Proxy1=93.157.44.25:3128
Proxy2=93.152.175.16:8080
Proxy3=93.152.175.1:8080
А если этих прокси более 5 тысяч я 5 тысяч раз буду приписывать Proxy1 ... Proxy5000 ?

И обязательно разделять адрес и порт прокси-сервера? Можно в 1 строке оставить?

Последний раз редактировалось Navado; 07.12.2012 в 16:44.
Navado вне форума Ответить с цитированием
Старый 07.12.2012, 16:49   #9
Larboss
Недо
Участник клуба
 
Регистрация: 11.08.2011
Сообщений: 1,394
По умолчанию

Цитата:
А если этих прокси более 5 тысяч я 5 тысяч раз буду приписывать Proxy1 ... Proxy5000 ?
Я как раз и довел вас до этой мысли... Разумеется нет, программисты обычно, напротив, ищут пути избавления от рутины, как вы могли такое подумать

Сделайте цикл считывания...
"Кривой" вариант, пример:
Код:
for i:=1 to CountOfProxy-1 do
Proxy_List[i] := IniFile.ReadString('Proxy_List','Proxy'+inttostr(i),'NIL');
Повторяю - это ужасная реализация

UPD

Цитата:
И обязательно разделять адрес и порт прокси-сервера?
Нет, при необходимости можете разделение на подстроки делать не посредственно во время присвоения соотв. полям.
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп

Последний раз редактировалось Larboss; 07.12.2012 в 16:56.
Larboss вне форума Ответить с цитированием
Старый 07.12.2012, 16:55   #10
Navado
Юный Дельфист
Пользователь
 
Аватар для Navado
 
Регистрация: 23.02.2010
Сообщений: 13
По умолчанию

Вы опять меня не поняли. Я имел в виду, прописывать Proxy1 ... Proxy5000 в ini файле. А потом уже считывать считывать рандомно какую-то строку Proxy.

Последний раз редактировалось Navado; 07.12.2012 в 17:02.
Navado вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как из ini-файла записать в МЕМО? Алексей_2012 Общие вопросы Delphi 4 24.10.2012 01:22
как прочесть изи INI - файла ??? Zero2525 Общие вопросы Delphi 4 13.05.2011 12:56
Как из ini файла заполнить ComboBox? alexusankov Общие вопросы Delphi 10 05.01.2011 13:58
Как считывать данные из файла для инициализации (не INI-файл) Smagulov85 Общие вопросы Delphi 6 04.12.2009 09:08
Как сделать прокси сервер с измененным ответом delphi-proger Фриланс 2 25.11.2009 17:51