ANTICHAT Forum
HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
НОВЫЕ ТОРГОВАЯ НОВОСТИ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 31.05.2009, 10:59
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

2 JeDaSe когда то писал, но на PHP. ВОт код, его бес труда сможешь перевести на Delphi (если знаешь php *CRAZY*)

PHP код:

function BuildHeader($method,$page,$host,$ref,$cookie,$data)
{
 
$ret="{$method} /{$page} HTTP/1.0\r\n".
      
"Host: {$host}\r\n".
      
"Referer: {$ref}\r\n";
 if (!empty(
$cookie)>0)
  { 
   
$ret.="Cookie: {$cookie}\r\n";
  } 
 if (
$method=='POST')
  {
   
$ret.="Content-Length: ".strlen($data)."\r\n".
         
"Content-Type: application/x-www-form-urlencoded\r\n\r\n{$data}\r\n";
  } else 
$ret.="\r\n";
 return 
$ret;
}


function 
Login($email,$pass)
{
 
$email=htmlspecialchars($email);
 
$pass=htmlspecialchars($pass);
 
$data="success_url=&fail_url=&try_to_login=1&email={$email}&pass={$pass}";
 
$head=BuildHeader('POST','login.php','vkontakte.ru','http://vkontakte.ru/login.php','',$data);
 
$page=LoadPage('vkontakte.ru',80,$head);
 if (
$page)
 {
  if (
$id=okLogin($page))
   {
    if (
$cookie=ParseCookie($page))
     {
      
$c='';
      for (
$x=0;$x<count($cookie);$x++) $c.=$cookie[$x].'; ';
      
$_SESSION[$id]=$c;
      
header("Location: ?id={$id}");
      die();
     } else 
ShowError('Get COokie Error',true);
   } else 
ShowError('Login Error',true);
 } else 
ShowError('getPage Error',true);
 return 
false;

 
Ответить с цитированием

  #2  
Старый 31.05.2009, 16:37
intNet
Познающий
Регистрация: 31.05.2009
Сообщений: 68
С нами: 8919750

Репутация: 19
По умолчанию

JeDaSe, приведу пример :
Код:
var
  wData: WSAData;
  S: TSocket;
  addr: sockaddr_in;
  login, pass: string[30];
  n: integer;
  postdata, sendbuff: string;
const
  fact: shortstring= 'HTTP/1.1 302 Found';
begin
  Login := Edit1.Text;
  Pass:= Edit2.Text;
  If (login='') or (pass = '') then
  begin
    MessageDLG('No login & pass!',mtERROR,[mbOK],0);
    exit;
  end;
  If WSAStartUp($0101, wData) <> 0 then
  begin
    MessageDLG('can''t include winsock library',mtError,[mbOK],0);
    exit;
  end;
  s:= Socket(AF_INET, Sock_STREAM, ipPROTO_TCP);
  If S = Invalid_Socket then begin
    ShowMessage('socket error #'+IntToStr(WSAGetLastError));
    CloseSocket(s);
    Exit;
  end;
  FillChar(addr, sizeOF(sockaddr_in),0);
  Addr.sin_family:=af_INET;
  Addr.sin_port:=hTons(80);
  Addr.sin_addr.S_addr:=Inet_ADDR('95.168.160.213');  // ip нужного тебе сайта
  Check(Connect(s, addr, SizeOf(TSockAddr)));
  postdata:= 'username='+Login+'&password='+Pass;  // данные для отправки. Смотри     сниффером
  SendBuff := Snd+ // пакет. опять же смотри сниффером.
  IntToStr(Length(PostData))+#13#10#13#10+postdata;
  send(s, SendBuff[1],Length(sendBuff),0);
  recv(s, buff, ToRecieve, 0);
  Check(ShutDown(s, sd_Both));
  Check(CloseSocket(s));
  Memo1.Text:=Buff;
  Memo1.SetFocus;
  WSACleanUp;
  If pos(fact, memo1.text) > 0 then // good !
  else
     // bad!
...
Это лишь малая часть кода, насколько я знаю для логина вконтакте нужно ещё и get-запрос отправить, думаю сам дальше по аналогии размерёшься.
 
Ответить с цитированием

  #3  
Старый 31.05.2009, 20:39
Flame of Soul
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
С нами: 9980798

Репутация: 435
Отправить сообщение для Flame of Soul с помощью MSN
По умолчанию

Сохранение компонента в файл, происходит по ниже приведенному коду, но после этого даже сама программа не может к нему обраться так как он блокирован записью. Просьба написать код который сохранял бы компонент в файл и при этом не блокировал бы работу с ним.
PHP код:
procedure TForm1.StoreClick(SenderTObject);
var
  
WTWriter;
begin
  W 
:= TWriter.Create(
  
TFileStream.Create('путь до файла'fmCreate), 4096);
  
W.WriteSignature;
  
W.WriteComponent(Spin);
  
W.Free;
end
 
Ответить с цитированием

  #4  
Старый 31.05.2009, 21:45
fatalo
Участник форума
Регистрация: 15.05.2008
Сообщений: 166
С нами: 9467906

Репутация: 128
По умолчанию

Появился вопрос.Как в Делфи в TWebBrowser'e ввести текст в определенную форму?
Тоесть открываю сайт,нахожу определенную форму и вставляю туда текст.
Я не прошу ничего писать за меня.Только подсказку действий.Заранее спасибо.
 
Ответить с цитированием

  #5  
Старый 01.06.2009, 00:14
Flame of Soul
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
С нами: 9980798

Репутация: 435
Отправить сообщение для Flame of Soul с помощью MSN
По умолчанию

Цитата:
Сообщение от fatalo  
Появился вопрос.Как в Делфи в TWebBrowser'e ввести текст в определенную форму?
Тоесть открываю сайт,нахожу определенную форму и вставляю туда текст.
Я не прошу ничего писать за меня.Только подсказку действий.Заранее спасибо.

1. Парсить полученный исходник, и вставлять текс непосредственно туда.

2ю Передача на сервер данных методом POST

PHP код:
procedure TForm1.PostWithWebBrowser(PostStringstringURLOleVariant);
var
  
DataPointer;
  
PostDataOleVariant;
  
FlagsTargetFrameHeadersOleVariant;
begin
  PostData 
:= VarArrayCreate([0Length(PostString) - 1], varByte);
  
Data := VarArrayLock(PostData);
  try
    
Move(PostString[1], Data^, Length(PostString));
  finally
    
VarArrayUnlock(PostData);
  
end;
  
Flags := EmptyParam;
  
TargetFrameName := EmptyParam;
  
Headers := EmptyParam;
  
WebBrowser1.Navigate2(URLFlagsTargetFramePostDataHeaders);
end

3. Заполнять форму


PHP код:
function FillForm(WebBrowserTWebBrowserFieldNamestringValuestring): Boolean;
  var
    
ijInteger;
    
FormItemVariant;
  
begin
    Result 
:= False;
  if 
WebBrowser.OleObject.Document.all.tags('FORM').Length 0 then
    begin
      
Exit;
    
end;  
  for 
:= 0 to WebBrowser.OleObject.Document.forms.Length do
    
begin
      FormItem 
:= WebBrowser.OleObject.Document.forms.Item(I);
      for 
:= 0 to FormItem.Length do
      
begin
        
try
        if 
FormItem.Item(j).Name FieldName then
          begin
            FormItem
.Item(j).Value := Value;
            
Result := True;
          
end;
        
except
          
Exit;
        
end;
      
end;
    
end;
  
end;

procedure TForm1.WebBrowser1DocumentComplete(SenderTObject;
    const 
pDispIDispatch; var URLOleVariant);
  
begin
    
if FillForm(WebBrowser1'homepage''http://www......) = False then
      ShowMessage('
ErrorField not available or no Form found.');
 end;

procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer);
  begin
    if ProgressMax = 0 then
    begin
      label1.Caption := '';
      Exit;
    end;
    try
      if (Progress <> -1) and (Progress <= ProgressMax) then
        label1.Caption := IntToStr((Progress * 100) div ProgressMax) + '
loaded...'
      else
        label1.Caption := '';
    except
      on EDivByZero do Exit;
    end;
  end;

procedure TForm1.Button1Click(Sender: TObject);
  begin
    Webbrowser1.Navigate('
http://www.......');
  
Caption := Webbrowser1.OleObject.Document.Title;
  
end
 
Ответить с цитированием

  #6  
Старый 01.06.2009, 00:24
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

5005 статей по Delphi. Статья "Как автоматически заполнить поля формы в IE "
Вбивай в поисковик и сразу найдешь.
"Как работать со всеми ячейками таблицы в WebBrowsere"
 
Ответить с цитированием

  #7  
Старый 01.06.2009, 15:17
SeNaP
Участник форума
Регистрация: 07.08.2008
Сообщений: 281
С нами: 9347610

Репутация: 165
По умолчанию

Подскажите пожалуйсто, как с помощью delphi можно записать данные в файл
например есть файл svhosts
Туда надо записать
10.179.34.0 localhost
 
Ответить с цитированием

  #8  
Старый 01.06.2009, 17:03
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
С нами: 9679872

Репутация: 347
По умолчанию

Цитата:
Сообщение от SeNaP  
Подскажите пожалуйсто, как с помощью delphi можно записать данные в файл
например есть файл svhosts
Туда надо записать
10.179.34.0 localhost
очень просто - запускаешь делфи, в меню File выбираешь Open. Там откроется диалоговое окно, где надо выбрать путь к файлу svhosts(или hosts смотря что нужно). Не забудь указать тип файла при выборе - any file. Ну а потом дописываешь эту свою строчку
Самое главное - нажми потом "Save" ато все старания будут напрасны

ну а вообще погугли примеры с:
assignfile, append, write, closefile

Последний раз редактировалось bons; 01.06.2009 в 17:09..
 
Ответить с цитированием

  #9  
Старый 01.06.2009, 17:22
intNet
Познающий
Регистрация: 31.05.2009
Сообщений: 68
С нами: 8919750

Репутация: 19
По умолчанию

SeNaP,
Код:
var
  f: TextFile;
begin
  AssignFile(f, 'имя файла');
  try
    Append(f);
    writeln(f, 'текст для записи');
  finally
    CloseFile(f);
И да кстати, ты уверен, что тебе нужен файл svhosts(не hosts?).
Получение директории файла hosts:
Код:
  Buff: array[1..MAX_PATH] of char;
begin
  GetSystemDirectory(@buff, MAX_PATH);
  lstrcat(@buff, '\drivers\etc\hosts');
 
Ответить с цитированием

  #10  
Старый 01.06.2009, 17:43
SeNaP
Участник форума
Регистрация: 07.08.2008
Сообщений: 281
С нами: 9347610

Репутация: 165
По умолчанию

Да ксте как раз он и нужен hosts
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Wi-Fi, BT] Задай вопрос - получи ответ! Alexsize Беспроводные технологии/Wi-Fi/Wardriving 2571 20.06.2026 14:48
[jQuery] - Задай вопрос, получи ответ Isis PHP 62 25.12.2009 03:25



Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.