Блог по программированию в среде Delphi

Поиск по блогу

Есть идея по созданию интересной программы?

Опиши тут и я по возможности постараюсь это реализовать специально для тебя! Без $ ))

суббота, 26 июня 2010 г.

InternetReadFile

Синтаксис Delphi 
function InternetReadFile(hFile: HINTERNET; 
                          lpBuffer: Pointer; 
                          dwNumberOfBytesToRead: DWORD; 
                          var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;

Параметры:
  • HFile – указатель на файл, полученный после вызова функции InternetOpenUrl.
  • LpBuffer – указатель на буфер, куда будут заноситься данные.
  • DwNumberOfBytesToRead - число байт, которое нужно причитать.
  • lpdwNumberOfBytesRead - содержит количество прочитанных байтов. Устанавливается в 0 перед проверкой ошибок.
Функция позволяет считывать данные, используя указатель, полученный в результате вызова InternetOpenUrl, FtpOpenFile, GopherOpenFile, или HttpOpenRequest. Так же, как и все остальные функции, возвращает TRUE или FALSE. После завершения работы функции нужно освободить указатель Hfile, вызвав InternetCloseHandle(hUrlFile) .
Вот, в принципе, и все об самых основных функциях. Для простейшего приложения можно определить примерно такой упрощенный алгоритм использования Internet- функций Win32 API взамен стандартным компонентов. HSession:= InternetOpen - открывает сессию.
HConnect:= InternetConnect - устанавливает соединение.
hHttpFile:=httpOpenRequest
HttpSendRequest - HttpOpenRequest и HttpSendRequest используются вместе для получения доступа к файлу по HTTP- протоколу. Вызов HttpOpenRequest создает указатель и определяет необходимые параметры, а HttpOpenRequest отсылает запрос HTTP серверу, используя эти параметры.

InternetOpenUrl

Синтаксис Delphi   
function InternetOpenUrl(hInet: HINTERNET; 
                         lpszUrl: PChar; 
                         lpszHeaders: PChar; 
                         dwHeadersLength: DWORD; 
                         dwFlags: DWORD; 
                         dwContext: DWORD): HINTERNET; stdcall;

Параметры:
  • HInet – указатель, полученный после вызова InternetOpen.
  • LpszUrl – URL , до которого нужно получить доступ. Обязательно должен начинаться с указания протокола, по которому будет происходить соединение. Поддерживаются следующие протоколы - ftp:, gopher:, http:, https:.
  • LpszHeaders – содержит заголовок HTTP запроса.
  • DwHeadersLength – длина заголовка. Если заголовок nil, то можно установить значение –1, и длина будет вычислена автоматически.
  • DwFlags – флаг, задающий дополнительные параметры перед выполнением функции. Вот некоторые его значения: INTERNET_ FLAG_EXISTING_CONNECT, INTERNET_FLAG_HYPERLINK, INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP, INTERNET_FLAG_NO_AUTO_REDIRECT, INTERNET_FLAG_NO_CACH E_WRITE, INTERNET_FLAG_NO_COOKIES.
Возвращается значение TRUE, если соединение успешно, или FALSE - в противном случае. Теперь можно спокойно считывать нужный файл функцией InternetReadFile.

InternetConnect

Функция открывает сессию с указанным сервером, используя протокол FTP, HTTP, Gopher.

Синтаксис Delphi  
function InternetConnect (hInet: HINTERNET;
                                      lpszServerName: PChar;
                                      nServerPort: INTERNET_PORT;
                                      lpszUsername: PChar;
                                      lpszPassword: PChar;
                                      dwService: DWORD;
                                      dwFlags: DWORD;
                                      dwContext: DWORD): HINTERNET; stdcall;
Параметры:
  • HInet – указатель, полученный после вызова InternetOpen.
  • LpszServerName – имя сервера, с которым нужно установить соединение. Может быть как именем хоста – domain.com.ua, так и IP- адресом – 134.123.44.67.
  • NServerPort – указывает на TCP/IP порт, с которым нужно соединиться. Для задания стандартных портов служат константы: NTERNET_DEFAULT_FTP_PORT (port 21), INTERNET_DEFAULT_GOPHER_PORT (port 70), INTERNET_DEFAULT_HTTP_PORT (port 80), INTERNET_DEFAULT_HTTPS_ PORT (port 443), INTERNET_DEFAULT_SOCKS_PORT (port 1080), INTERNET_INVALID_PORT_NUMBER – порт по умолчанию для сервиса, описанного в dwService. Стандартные порты для различных сервисов находятся в файле SERVICES в директории Windows.
  • LpszUsername – имя пользователя, желающего установить соединение. Если установлено в nil , то будет использовано имя по умолчанию, но для HTTP это вызовет исключение.
  • LpszPassword – пароль пользователя для доступа к серверу. Если оба значения установить в nil, то будут использованы параметры по умолчанию.
  • DwService – задает сервис, который требуется от сервера. Может принимать значения INTERNET_SERVICE_FTP, INTERNET_SERVICE_GOPHER, INTERNET_SERVICE_HTTP.
  • DwFlags - Задает специфические параметры для соединения. Например, если DwService установлен в INTERNET_SERVICE_FTP, то можно установить в INTERNET_FLAG_PASSIVE для использования пассивного режима.
Функция возвращает указатель на установленную сессию или nil в случае невозможности ее установки.
Итак, мы имеем связь с сервером, нужный нам порт открыт. Теперь следует открыть соответствующий файл. Для этого определена функция InternetOpenUrl. Она принимает полный URL файла и возвращает указатель на него. Кстати, перед ее использованием не нужно вызывать InternetConnect.

InternetOpen

Эта функция инициализирует WinInet  и возвращает дескриптор, который необходим для вызова других функций WinInet. В случае неудачи возвращается NULL.

Синтаксис Delphi
function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD;
lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall;

Параметры:
lpszAgent
– строка символов, которая передается серверу и идентифицирует программное обеспечение, пославшее запрос.
dwAccessType
- задает необходимые параметры доступа. Принимает следующие значения:
  • INTERNET_OPEN_TYPE_DIRECT – обрабатывает все имена хостов локально.
  • INTERNET_OPEN_TYPE_PRECONFIG – берет установки из реестра.
  • INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY - берет установки из реестра и предотвращает запуск Jscript или Internet Setup (INS) файлов.
  • INTERNET_OPEN_TYPE_PROXY – использование прокси-сервера. В случае неудачи использует INTERNET_OPEN_TYPE_DIRECT. LpszProxy – адрес прокси-сервера. Игнорируется только если параметр dwAccessType отличается от INTERNET_OPEN_TYPE_PROXY. LpszProxyBypass - спис ок имен или IP- адресов, соединяться с которыми нужно в обход прокси-сервера. В списке допускаются шаблоны. Так же, как и предыдущий параметр, не может содержать пустой строки. Если dwAccessType отличен от INTERNET_OPEN_TYPE_PROXY, то значения игнорируютс я, и параметр можно установить в nil. DwFlags – задает параметры, влияющие на поведение Internet- функций . Возможно применение комбинации из следующих разрешенных значений: INTERNET_FLAG_ASYNC, INTERNET_FLAG_FROM_CACHE, INTERNET_FLAG_OFFLINE
Функция инициализирует использование Internet- функций Win32 API. В принципе, ваше приложение может неоднократно вызывать эту функцию, например, для доступа к различным сервисам, но обычно ее достаточно вызвать один раз. При последующих вызовах других фун кций возвращаемый указатель HINTERNET должен передаваться им первым. Таким образом, можно дважды вызвать InternetOpen, и, имея два разных указателя HINTERNET, работать с HTTP и FTP параллельно. В случае неудачи, она возвращает nil, и для более детального анализа следует вызвать GetLastError.

Wininet Delphi for MSDN (Мой корявый перевод)




HINTERNET

Это дескриптор, который создают и используют функции Wininet. Этот тип дескриптора не является взаимозаменяемым с другими дескрипторами. Поэтому он не может быть использован в таких функциях, как ReadFile или CloseHandle. Так же, кроме того, другие дескрипторы не могут быть использованы с функциями WinINet. Например, дескриптор полученный в результате работы CreateFile не может быть использован в InternetReadFile.




Функциями WinInet создающие дескрипторы HINTERNET

вторник, 22 июня 2010 г.

Synapse авторизация на www.free-lance.ru

var
  html:TStringList;
  httpsend: THTTPSend;
  stream:TStringStream;
  sSecur:TStringList;
begin
  //инициализация всего необходимого
  html:=TStringList.Create;
  stream:=TStringStream.Create('');
  httpsend:=THTTPSend.Create;
  //очистка
  httpsend.Document.Clear;
  //получение страницы
  httpsend.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3';
  if not httpsend.HTTPMethod('get','http://www.free-lance.ru/') then
    ShowMessage('Не получилось скачать:(');
  //запись страницы
  httpsend.Document.SaveToStream(stream);
  //вывод страницы
  Memo1.Lines.add(stream.DataString);
  sSecur:=TStringList.Create;
  sSecur.Clear;
  sSecur:=Security(stream.DataString);
  //Memo2.Lines:=sSecur;
  stream:=TStringStream.Create('');
  stream.WriteString('action=login');
  stream.WriteString('&login=ЛОГИН');
  stream.WriteString('&passwd=ПАРОЛЬ');
  stream.WriteString('&x=3');//хотели обмануть)) нужно менять рандомно иначе забанят
  stream.WriteString('&y=3');//хотели обмануть))
  httpsend.Document.Clear;
  httpsend.Document.LoadFromStream(stream);
  httpsend.MimeType:='application/x-www-form-urlencoded';
  if httpsend.HTTPMethod('post','http://www.free-lance.ru/') then
    Memo2.Lines.Add(httpsend.Headers.Text);
  Memo2.Lines.Add(IntToStr(httpsend.ResultCode));
  sSecur.Free;
end;

Знаки вопросов вместо русских букв (?????????? ???????)

Пробовал с Indy 10.5.5 c indy 9 пока без успехов))

var
  html:String;
  stream: tStream;
  strings1: tStringList;
begin
   stream := tMemoryStream.Create;
   IdHTTP1.Get('http://nmdsoft.blogspot.com',stream);
   stream.Position := 0;
   strings1 := tStringList.Create;
   strings1.LoadFromStream(stream);
   memo1.Lines.Assign(strings1);
   strings1.Free;
   stream.Free;
   //memo1.Text:=Utf8ToAnsi(memo1.Text);
end;

Кракозябры вместо русских букв (решение)

function RussianToUnicode(S: String): String;
var Wrd:Word;
  pW,pR:PWord;
  len:Integer;
begin
  pW:=@S[1];
  len:=Length(S);
  SetLength(Result,len);
  pR:=@Result[1];
  while Len<>0 do begin
    Wrd:=pW^;
    case Wrd of
      $C0..$DF,$E0..$FF:pR^:=Wrd+50;
      else pR^:=Wrd;
    end;
    inc(pW);
    inc(pR);
    dec(Len);
  end;
end;

понедельник, 21 июня 2010 г.

Компоненты для Delphi 7

Indy 10.5.5 скачана с SVN сегодня смотрим дату поста

Indy актуальная версия

не тут ftp://indy.fulgan.com/ZIP/
а тут SVN https://svn.atozed.com:444/svn/Indy10/
login Indy-Public-RO
Pass ПУСТО
SVN скачать можно тут
Можно так же скачать отсюда чтобы не заморачиваться  с SVN