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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2011, 22:14   #11
ramzes777
Пользователь
 
Регистрация: 15.09.2011
Сообщений: 92
По умолчанию

Ошибка
Код:
EInOutError with message "I/O error 105'
Всмысле по 6 посту?
Заголовок имеется ввиду title? title там "Удаленка Shareflare"

Ошибка вылезает на строчке
Код:
writeln('connection error #',WSAGetLastError);

Последний раз редактировалось Stilet; 09.10.2011 в 11:49.
ramzes777 вне форума Ответить с цитированием
Старый 04.10.2011, 22:37   #12
_Troy
Я не простой
Пользователь
 
Аватар для _Troy
 
Регистрация: 29.09.2011
Сообщений: 77
По умолчанию

Цитата:
Сообщение от ramzes777 Посмотреть сообщение
Всмысле по 6 посту?
Заголовок имеется ввиду title? title там "Удаленка Shareflare"
Нет.
Ты представляешь что такое http-заголовок?
Если да, то должен в той программе его разглядеть и понять что там к чему, сформировать такой же у себя в проге и отослать его. Если же нет - то учи http (протокол в смысле)

Вот еще тебе исходник, сиди разбирайся. Код рабочий на 100%. Делал давно, но забил потом на это...
Вложения
Тип файла: rar WinSock.rar (18.7 Кб, 12 просмотров)
Знание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нем сведения

Последний раз редактировалось _Troy; 04.10.2011 в 22:43.
_Troy вне форума Ответить с цитированием
Старый 04.10.2011, 22:53   #13
ramzes777
Пользователь
 
Регистрация: 15.09.2011
Сообщений: 92
По умолчанию

Про заголовки - погуглил, это я делал также, эффект тот же.
Спасибо за пример, посмотрю.
А что программа делает? Отправляет текст на сайт?
ramzes777 вне форума Ответить с цитированием
Старый 04.10.2011, 22:56   #14
_Troy
Я не простой
Пользователь
 
Аватар для _Troy
 
Регистрация: 29.09.2011
Сообщений: 77
По умолчанию

Цитата:
Сообщение от ramzes777 Посмотреть сообщение
А что программа делает? Отправляет текст на сайт?
Отправляет http-заголовок на мой сайт, сервер принимает данные, данные обрабатываются php скриптом и происходят какие-то действия. Конкретно тут - типа отправляешь сообщение, а на сайте оно появляется))
В общих чертах...
Знание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нем сведения
_Troy вне форума Ответить с цитированием
Старый 04.10.2011, 22:57   #15
ramzes777
Пользователь
 
Регистрация: 15.09.2011
Сообщений: 92
По умолчанию

Отправил текст "Fuck", в результате вижу значения этой же тематики на русском, думаю выдачу яндекса парсит чтоли :D

*Значение программы понял.

*пока печатал уже ответили )))

Не получается сделать.

..............................

Вот код рабочий на пхп:
Код:
//здесь авторизируемся на сайте   
$url="remote.shf.wm-panel.com/?page=auth?lang=en";   
$ch = curl_init(); 
// cURL будет выводить подробные сообщения о всех производимых действиях
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);   
// url страницы для авторизации   
curl_setopt($ch, CURLOPT_URL, $url);   
//вернуть результат запроса в переменную, а не на экран   
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);   
// используем метод POST    
curl_setopt($ch, CURLOPT_POST, 1);   
// данные передаваемые POST запросом   
curl_setopt($ch, CURLOPT_POSTFIELDS, "go=1&log=ЛОГИН&pas=ПАРОЛЬ");   
//сохранять полученные COOKIE в файл   
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
// при получении HTTP заголовка "Location: " будет происходить перенаправление
// на указанный этим заголовком URL
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
curl_setopt($ch, CURLOPT_REFERER, $referer);   
//запускаем   
$result = curl_exec($ch);


//здесь скачиваем как авторизированные пользователь страницу   
$url="http://remote.shf.wm-panel.com/?page=add";   
//url страницы или файла для скачивания   
curl_setopt($ch, CURLOPT_URL, $url);   
//запрещаем делать запрос с помощью POST и соответственно разрешаем с помощью GET    
curl_setopt($ch, CURLOPT_POST, 0);    
//отсылаем серверу COOKIE полученные от него при авторизации   
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');//get cookie from file  
// при получении HTTP заголовка "Location: " будет происходить перенаправление
// на указанный этим заголовком URL
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
curl_setopt($ch, CURLOPT_REFERER, $referer);  
//запускаем   
$result = curl_exec($ch);   
       
curl_close($ch);     
       
echo $result;
На делфи сделать до сих пор не получается...

А как через инди отправить вот так:
Код:
go=1&log=ЛОГИН&pas=ПАРОЛЬ
?

Последний раз редактировалось Stilet; 09.10.2011 в 11:49.
ramzes777 вне форума Ответить с цитированием
Старый 06.10.2011, 20:00   #16
sashaxD
Пользователь
 
Регистрация: 19.05.2011
Сообщений: 48
По умолчанию

Цитата:
Сообщение от ramzes777 Посмотреть сообщение
А как через инди отправить вот так:
Код:
go=1&log=ЛОГИН&pas=ПАРОЛЬ
?
var ss : string
begin
ss := idhttp1.get(....go=1&log=ЛОГИН&pas= ПАРОЛЬ);

Ты это имел ввиду?
sashaxD вне форума Ответить с цитированием
Старый 06.10.2011, 20:19   #17
ramzes777
Пользователь
 
Регистрация: 15.09.2011
Сообщений: 92
По умолчанию

Да, только не залогинивается так, пробовал. Выдает опять страницу авторизации...

Вот что получилось:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var PageProfile:string;
begin
 IdHTTP1.AllowCookies:=true;
 IdHTTP1.HandleRedirects:=true;
 try
  PageProfile:=IdHTTP1.Get('http://remote.shf.wm-panel.com/?page=auth?go=1&log=ЛОГИН&pas=ПАРОЛЬ');
  memo1.Lines.Add(PageProfile);

 except
 end;
 if Pos('logout', PageProfile)<>0 then
  Memo1.Lines.Add('Успешно')
 else
  Memo1.Lines.Add('Не успешно');
end;
Не авторизируется...

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  WSAData: TWSAData;
  ErrorCode: Integer;
  FSocket: TSocket;
  HostEnt: PHostEnt;
  InAddr: TInAddr;
  FAddr: TSockAddrIn;
  Blocking: Longint;
  arg: Integer;

  request: String;
  request_data: String;
  savetickcount: Cardinal;
  c: Char;
  response: String;

  username: String; 
  password: String; 
begin 
  username:='login';
  password:='pass';

  ErrorCode:=WSAStartup($0101, WSAData); 
  if ErrorCode<>0 then raise Exception.Create('WSAStartup'); 
  try 
    FSocket:=socket(PF_INET, SOCK_STREAM, 0); 
    if FSocket=INVALID_SOCKET then raise Exception.Create('socket'); 

    HostEnt:=gethostbyname('remote.shf.wm-panel.com');
    FillChar(InAddr, SizeOf(InAddr), 0); 
    if HostEnt<>nil then 
    begin
      InAddr.S_un_b.s_b1:=HostEnt^.h_addr^[0]; 
      InAddr.S_un_b.s_b2:=HostEnt^.h_addr^[1]; 
      InAddr.S_un_b.s_b3:=HostEnt^.h_addr^[2]; 
      InAddr.S_un_b.s_b4:=HostEnt^.h_addr^[3]; 
    end else raise Exception.Create('gethostbyname');
    FAddr.sin_family:=PF_INET; 
    FAddr.sin_addr:=InAddr; 
    FAddr.sin_port:=htons(80); 

    Blocking:=0; 
    ioctlsocket(FSocket, FIONBIO, Blocking); 

    ErrorCode:=connect(FSocket, FAddr, SizeOf(FAddr)); 
    if ErrorCode<>0 then raise Exception.Create('connect'); 

    try 
      //  post äàííûå 
      request_data:='go=1&log='+username+'&pas='+password; 
      //  ãîòîâèì post çàïðîñ 
      request:=''; 
      request:=request+'POST /?page=auth HTTP/1.1'+#13#10;
      request:=request+'Host: remote.shf.wm-panel.com'+#13#10;
      request:=request+'Connection: close'+#13#10;
      request:=request+'Proxy-Connection: close'+#13#10;
      request:=request+'User-Agent: Mozilla/4.0'+#13#10;
      request:=request+'Content-Type: application/x-www-form-urlencoded'+#13#10;  
      request:=request+'Content-Length: '+IntToStr(Length(request_data))+#13#10;  
      request:=request+#13#10;
      //  îòñûëàåì ñåðâåðó  

      send(FSocket, Pointer(request)^, Length(request), 0);
      send(FSocket, Pointer(request_data)^, Length(request_data), 0); 

      //  òî ÷òî ïîñëàëè ñåðâåðó
      Memo1.Lines.Add(request);
      Memo1.Lines.Add(request_data); 
      Memo1.Lines.Add('--'); 
      //  òåïåðü ÷èòàåì åãî îòâåò
      //  ÷èòàåì çàãîëîâîê îòâåòà 
      //  1 ìèí òàéìàóò 
      savetickcount:=GetTickCount; 
      response:='';

      while GetTickCount-savetickcount<60000 do 
      begin 
        ioctlsocket(FSocket, FIONREAD, arg);
        if arg>0 then
        begin
          recv(FSocket, c, 1, 0);
          response:=response+c; 
          if (Length(response)>=4) and (Copy(response, Length(response)-3, 4)=#13#10#13#10) then Break; 
        end else Sleep(10); 
      end;
      //  âîò çàãîëîâîê
      //  ÷òîáû ñîáðàòü êóêè îáðàáàòûâàåì ñòðîêè ñ Set-Cookie
      //  response ìîæíî çàñóíóòü â îòäåëüíûé TStrings, ÷òîáû óäîáíåé áûëî åãî ïàðñèòü
      Memo1.Lines.Add(response);
      Memo1.Lines.Add('--');
    finally
   end;
  finally
  end;
end;
Авторизируется вроде... При последующей отправке пост запроса (будучи авторизованным) выкидывает на страницу авторизации.
Как сделать пост запрос авторизированным?
Может куки отправить вместе с пост запросом? Как это сделать, если это так?

Последний раз редактировалось Stilet; 09.10.2011 в 11:50.
ramzes777 вне форума Ответить с цитированием
Старый 06.10.2011, 20:59   #18
ramzes777
Пользователь
 
Регистрация: 15.09.2011
Сообщений: 92
По умолчанию

Пытаюсь это организовать так:
Код:
    username:='значение_которое_добавить';

  ErrorCode:=WSAStartup($0101, WSAData);
  if ErrorCode<>0 then raise Exception.Create('WSAStartup'); 
  try 
    FSocket:=socket(PF_INET, SOCK_STREAM, 0); 
    if FSocket=INVALID_SOCKET then raise Exception.Create('socket'); 

    HostEnt:=gethostbyname('remote.shf.wm-panel.com');
    FillChar(InAddr, SizeOf(InAddr), 0); 
    if HostEnt<>nil then 
    begin
      InAddr.S_un_b.s_b1:=HostEnt^.h_addr^[0]; 
      InAddr.S_un_b.s_b2:=HostEnt^.h_addr^[1]; 
      InAddr.S_un_b.s_b3:=HostEnt^.h_addr^[2]; 
      InAddr.S_un_b.s_b4:=HostEnt^.h_addr^[3]; 
    end else raise Exception.Create('gethostbyname');
    FAddr.sin_family:=PF_INET; 
    FAddr.sin_addr:=InAddr; 
    FAddr.sin_port:=htons(80); 

    Blocking:=0; 
    ioctlsocket(FSocket, FIONBIO, Blocking); 

    ErrorCode:=connect(FSocket, FAddr, SizeOf(FAddr)); 
    if ErrorCode<>0 then raise Exception.Create('connect'); 

    try 
      //  post äàííûå 
      request_data:='go=1&httpftp_link='+username;
      //  ãîòîâèì post çàïðîñ 
      request:=''; 
      request:=request+'POST /?page=add HTTP/1.1'+#13#10;
      request:=request+'Host: remote.shf.wm-panel.com'+#13#10;
      request:=request+'Connection: close'+#13#10;
      request:=request+'Proxy-Connection: close'+#13#10;
      request:=request+'User-Agent: Mozilla/4.0'+#13#10;
      request:=request+'Content-Type: application/x-www-form-urlencoded'+#13#10;  
      request:=request+'Content-Length: '+IntToStr(Length(request_data))+#13#10;  
      request:=request+#13#10;
      //  îòñûëàåì ñåðâåðó  

      send(FSocket, Pointer(request)^, Length(request), 0);
      send(FSocket, Pointer(request_data)^, Length(request_data), 0); 

      //  òî ÷òî ïîñëàëè ñåðâåðó
      Memo1.Lines.Add(request);
      Memo1.Lines.Add(request_data); 
      Memo1.Lines.Add('--'); 
      //  òåïåðü ÷èòàåì åãî îòâåò
      //  ÷èòàåì çàãîëîâîê îòâåòà 
      //  1 ìèí òàéìàóò 
      savetickcount:=GetTickCount; 
      response:='';

      while GetTickCount-savetickcount<60000 do 
      begin 
        ioctlsocket(FSocket, FIONREAD, arg);
        if arg>0 then
        begin
          recv(FSocket, c, 1, 0);
          response:=response+c; 
          if (Length(response)>=4) and (Copy(response, Length(response)-3, 4)=#13#10#13#10) then Break; 
        end else Sleep(10); 
      end;
      //  âîò çàãîëîâîê
      //  ÷òîáû ñîáðàòü êóêè îáðàáàòûâàåì ñòðîêè ñ Set-Cookie  
      //  response ìîæíî çàñóíóòü â îòäåëüíûé TStrings, ÷òîáû óäîáíåé áûëî åãî ïàðñèòü
      Memo1.Lines.Add(response);
      Memo1.Lines.Add('--');
    finally 
      ErrorCode:=closesocket(FSocket); 
      if ErrorCode<>0 then raise Exception.Create('closesocket'); 
    end;
  finally
    ErrorCode := WSACleanup;
    if ErrorCode<>0 then raise Exception.Create('WSACleanup');
  end;
Вставляю это перед
Код:
   end;
  finally
  end;
end;
в конце кода.
Выкидывает на страницу авторизации.

Может можно как нибудь куки отсюда вставить в Инди и через инди отправить пост запрос?

Все также второй запрос не получается, т.к. выкидывает на страницу ваторизации. Что получилось прикрепил проект. Подредактируйте пожалуйста чтоб работало.

Логин: 123456@mail.ru
Пароль: 123456

Логин и пароль рабочие.
Вложения
Тип файла: rar sfl.rar (15.6 Кб, 8 просмотров)

Последний раз редактировалось Stilet; 09.10.2011 в 11:50.
ramzes777 вне форума Ответить с цитированием
Старый 09.10.2011, 09:47   #19
ramzes777
Пользователь
 
Регистрация: 15.09.2011
Сообщений: 92
По умолчанию

Тему можно закрывать.
ramzes777 вне форума Ответить с цитированием
Ответ


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