function GetLastError: DWORD; stdcall;
Функция возвращает значение последней ошибки в потоке.
Пример
begin
if DeleteFile('CanDeletMe.txt') then
ShowMessage('Файл удален')
else
ShowMessage('Файл не удален, код ошибки = '+IntToStr(GetLastError));
end;
Есть идея по созданию интересной программы?
воскресенье, 27 июня 2010 г.
InternetCloseHandle
Ярлыки:
Wininet
Закрытие дескриптора любой функции Wininet
Синтаксис Delphi
function InternetCloseHandle(hInet: HINTERNET): BOOL; stdcall;
hInet Дескриптор который необходимо закрыть.
Возвращает True если дескриптор закрыт успешно, в противном случае False для получения дополнительной информации вызовите функцию GetLastError
Синтаксис Delphi
function InternetCloseHandle(hInet: HINTERNET): BOOL; stdcall;
hInet Дескриптор который необходимо закрыть.
Возвращает True если дескриптор закрыт успешно, в противном случае False для получения дополнительной информации вызовите функцию GetLastError
InternetReadFile
Ярлыки:
Wininet
Чтение результатов выполнения функций InternetOpenUrl, FtpOpenFile или HttpOpenRequest
Синтаксис Delphi
function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer;
dwNumberOfBytesToRead: DWORD;
var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;
hFile Дескриптор сессии, полученный вызовом функции.
lpBuffer Адрес буфера в который будут записаны данные
dwNumberOfBytesToRead Размер буфера в который будут записаны данные.
lpdwNumberOfBytesRead Число прочитанных байт.
Синтаксис Delphi
function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer;
dwNumberOfBytesToRead: DWORD;
var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;
hFile Дескриптор сессии, полученный вызовом функции.
lpBuffer Адрес буфера в который будут записаны данные
dwNumberOfBytesToRead Размер буфера в который будут записаны данные.
lpdwNumberOfBytesRead Число прочитанных байт.
HttpSendRequest
Ярлыки:
Wininet
Посылает указанный запрос на сервер HTTP
Синтаксис Delphi
function HttpSendRequest(hRequest: HINTERNET; lpszHeaders: PChar;
dwHeadersLength: DWORD; lpOptional: Pointer;
dwOptionalLength: DWORD): BOOL; stdcall;
hRequest Дескриптор, полученный вызовом предыдущей функции.
lpszHeaders, dwHeadersLength Позволяет добавлять дополнительные заголовки к запросу. Подробнее об HTTP заголовках можно узнать на www.w3.org.
lpOptional,dwOptionalLength Указатель на данные, которые будут посланы на сервер вместе с запросом. Используется в методах "POST" и "PUT".
Простенький пример отправки POST запроса в wininet
Синтаксис Delphi
function HttpSendRequest(hRequest: HINTERNET; lpszHeaders: PChar;
dwHeadersLength: DWORD; lpOptional: Pointer;
dwOptionalLength: DWORD): BOOL; stdcall;
hRequest Дескриптор, полученный вызовом предыдущей функции.
lpszHeaders, dwHeadersLength Позволяет добавлять дополнительные заголовки к запросу. Подробнее об HTTP заголовках можно узнать на www.w3.org.
lpOptional,dwOptionalLength Указатель на данные, которые будут посланы на сервер вместе с запросом. Используется в методах "POST" и "PUT".
Простенький пример отправки POST запроса в wininet
HttpOpenRequest
Ярлыки:
Wininet
HTTP запрос выполняется в несколько этапов: открытие запроса, определение HTTP заголовка, собственно отправка запроса, чтение и обработка данных. Эта функция, как следует из её названия, открывает HTTP запрос.
Синтаксис Delphi
function HttpOpenRequest(hConnect: HINTERNET; lpszVerb: PChar;
lpszObjectName: PChar; lpszVersion: PChar; lpszReferrer: PChar;
lplpszAcceptTypes: PLPSTR; dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
hConnect Дескриптор сессии.
lpszVerb Задаёт имя команды запроса. Мы будем использовать методы "GET" и "POST".
lpszObjectName Имя целевого объекта. Это может быть просто HTML файл, скрипт или выполняемый модуль на сервере.
lpszReferer URL адрес предыдущей страницы. Чаще всего этот параметр игнорируется серверами, но если вдруг сервер перестанет подавать признаки жизни, попробуйте задать его, может помочь.
lpszAcceptTypes Определяет тип содержимого допускаемого клиентской стороной. Иногда MS IE передаёт сюда вот такую длинную строчку: "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*", иногда это просто "*/*".
dwFlags Комбинация интернет флагов. Например, при использовании SSL соединений мы будем указывать флаг INTERNET_FLAG_SECURE. Так же нам будет полезен флаг INTERNET_FLAG_KEEP_CONNECTION, который позволяет удерживать соединение с сервером между запросами. Это бывает полезно, если мы хотим, чтобы сервер не забыл о нас во время сессий требующих входа по паролю.
Синтаксис Delphi
function HttpOpenRequest(hConnect: HINTERNET; lpszVerb: PChar;
lpszObjectName: PChar; lpszVersion: PChar; lpszReferrer: PChar;
lplpszAcceptTypes: PLPSTR; dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
hConnect Дескриптор сессии.
lpszVerb Задаёт имя команды запроса. Мы будем использовать методы "GET" и "POST".
lpszObjectName Имя целевого объекта. Это может быть просто HTML файл, скрипт или выполняемый модуль на сервере.
lpszReferer URL адрес предыдущей страницы. Чаще всего этот параметр игнорируется серверами, но если вдруг сервер перестанет подавать признаки жизни, попробуйте задать его, может помочь.
lpszAcceptTypes Определяет тип содержимого допускаемого клиентской стороной. Иногда MS IE передаёт сюда вот такую длинную строчку: "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*", иногда это просто "*/*".
dwFlags Комбинация интернет флагов. Например, при использовании SSL соединений мы будем указывать флаг INTERNET_FLAG_SECURE. Так же нам будет полезен флаг INTERNET_FLAG_KEEP_CONNECTION, который позволяет удерживать соединение с сервером между запросами. Это бывает полезно, если мы хотим, чтобы сервер не забыл о нас во время сессий требующих входа по паролю.
Простенький снифер
Ярлыки:
Инструменты
Иногда требуется написать приложение в функционал которого входит авторизация на каком нибудь до селе нам неизвестном сайте. Для того, чтобы узнать, что необходимо отправить или какой запрос сделать серверу, чтобы программно авторизироваться на сайте и есть специальные программы которые помогают нам это сделать.
Лично я использую плагин для Firefox HTTPfox с помощью которого можно получить всю интересующую нас информацию.
Запускаю плагин кнопочкой Play после чего выполняю авторизацию на необходимом сайте
и смотрю, что же необходимо отправить или получить.
Вот пример того как выглядит запрос GET при обращении к www.google.ru
Так же есть еще большое кол-во сниферов, но пока для моих целей мне хватает функционала HTTPfo. Сам плагин можно скачать отсюда
Лично я использую плагин для Firefox HTTPfox с помощью которого можно получить всю интересующую нас информацию.
Запускаю плагин кнопочкой Play после чего выполняю авторизацию на необходимом сайте
и смотрю, что же необходимо отправить или получить.
Вот пример того как выглядит запрос GET при обращении к www.google.ru
Так же есть еще большое кол-во сниферов, но пока для моих целей мне хватает функционала HTTPfo. Сам плагин можно скачать отсюда
суббота, 26 июня 2010 г.
InternetReadFile
Ярлыки:
Wininet
Синтаксис Delphi
function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer; dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;
Параметры:
- HFile – указатель на файл, полученный после вызова функции InternetOpenUrl.
- LpBuffer – указатель на буфер, куда будут заноситься данные.
- DwNumberOfBytesToRead - число байт, которое нужно причитать.
- lpdwNumberOfBytesRead - содержит количество прочитанных байтов. Устанавливается в 0 перед проверкой ошибок.
Вот, в принципе, и все об самых основных функциях. Для простейшего приложения можно определить примерно такой упрощенный алгоритм использования Internet- функций Win32 API взамен стандартным компонентов. HSession:= InternetOpen - открывает сессию.
HConnect:= InternetConnect - устанавливает соединение.
hHttpFile:=httpOpenRequest
HttpSendRequest - HttpOpenRequest и HttpSendRequest используются вместе для получения доступа к файлу по HTTP- протоколу. Вызов HttpOpenRequest создает указатель и определяет необходимые параметры, а HttpOpenRequest отсылает запрос HTTP серверу, используя эти параметры.
InternetOpenUrl
Ярлыки:
Wininet
Синтаксис 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.
InternetConnect
Ярлыки:
Wininet
Функция открывает сессию с указанным сервером, используя протокол 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;
Параметры:
Итак, мы имеем связь с сервером, нужный нам порт открыт. Теперь следует открыть соответствующий файл. Для этого определена функция InternetOpenUrl. Она принимает полный URL файла и возвращает указатель на него. Кстати, перед ее использованием не нужно вызывать InternetConnect.
Синтаксис 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 для использования пассивного режима.
Итак, мы имеем связь с сервером, нужный нам порт открыт. Теперь следует открыть соответствующий файл. Для этого определена функция InternetOpenUrl. Она принимает полный URL файла и возвращает указатель на него. Кстати, перед ее использованием не нужно вызывать InternetConnect.
InternetOpen
Ярлыки:
Wininet
Эта функция инициализирует WinInet и возвращает дескриптор, который необходим для вызова других функций WinInet. В случае неудачи возвращается NULL.
Синтаксис Delphi
function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD;
lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HINTERNET; stdcall;
Параметры:
Синтаксис 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
Wininet Delphi for MSDN (Мой корявый перевод)
Ярлыки:
Wininet
HINTERNET
Это дескриптор, который создают и используют функции Wininet. Этот тип дескриптора не является взаимозаменяемым с другими дескрипторами. Поэтому он не может быть использован в таких функциях, как ReadFile или CloseHandle. Так же, кроме того, другие дескрипторы не могут быть использованы с функциями WinINet. Например, дескриптор полученный в результате работы CreateFile не может быть использован в InternetReadFile.
Функциями WinInet создающие дескрипторы HINTERNET
вторник, 22 июня 2010 г.
Synapse авторизация на www.free-lance.ru
Ярлыки:
Synapse
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;
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;
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;
Кракозябры вместо русских букв (решение)
Ярлыки:
indy
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;
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 г.
Indy актуальная версия
Ярлыки:
indy
Подписаться на:
Сообщения (Atom)