В программе существует возможность отправлять Post и Get запросы.
GET используется для запроса содержимого указанного ресурса. С помощью метода GET можно также начать какой-либо процесс. В этом случае в тело ответного сообщения следует включить информацию о ходе выполнения процесса. Другими словами, вызывая команду Get вы запускаете на сервере в интернете какой то php скрипт, который возвращает вам некий результат. Также с помощью этого метода можно скачать файл с сайта.
POST Применяется для передачи пользовательских данных заданному ресурсу. Например, в блогах посетители обычно могут вводить свои комментарии к записям в HTML-форму, после чего они передаются серверу методом POST и он помещает их на страницу. При этом передаваемые данные (в примере с блогами — текст комментария) включаются в тело запроса. Аналогично с помощью метода POST обычно загружаются файлы на сервер. В данном случае вы также вызываете какой то php скрипт, но при этом передаете ему некоторые параметры.
На текущий момент в NOMAD реализован класс THTTP, который позволяет использовать эти методы в программе.
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Procedure Button1OnClick(); var errorText :string; getPost:THTTP; begin getPost := THTTP.Create; //создаем объект класса THTTP getPost.Host := 'http://nomadbot.com/privet.php'; //задаем откуда адрес вызываемого скрипта if getPost.Get(errorText ,nil) then ShowMessage(getPost.Text) //если запрос выполнен успешно, то сообщим текст который нам возвратил скрипт else ShowMessage(errorText);//если запрос закончился ошибкой, то сообщим текст ошибки getPost.free;//уничтожаем объект класса, освобождаем память end; |
И пример для Post запроса:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Procedure Button1OnClick(); var errorText :string; getPost :THTTP; list :tstringlist; begin list := tstringlist.Create;//создаем список в котором будем передавать параметры list.add('par1=' + 'Мама');//записываем параметры list.add('par2=' + 'мыла'); list.add('par3=' + 'раму'); getPost.Host := 'http://nomadbot.com/privetPost.php';//указываем куда будем пересылать параметры if getPost.Post(list,errorText) then //вызываем Post и передаем параметры ShowMessage(getPost.Text)//сообщить возвращенный скриптом результат else ShowMessage(errorText);//если была возвращена ошибка, то сообщим ее getPost.free; //уничтожаем объект класса THTTP list.free;//уничтожаем список end; |
Полный перечень свойств, которые есть у класса на данный момент (если чего то не хватает, пишите добавим, может быть):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Доступ к полям заголовка запроса++ //Если не заполнять эти поля, то будут отсылаться значения полей по умолчанию property UserAgent:String; property Accept:String; property AcceptLanguage; property Connection:String; property Host:String; //Доступ к полям заголовка запроса-- Text: string;//сюда возвращается результат исполнения скрипта property ConnectTimeout:Integer;//длительность соединения в миллисекундах property ReadTimeout:Integer;//время в миллисекундах сколько мы будем ждать ответа. Когда это время истечет, метод вернет ошибку. property HandleRedirects:boolean;//Для автоматического перехода на перенаправляемую страницу необходимо установить свойство = true,иначе в случае перенаправления будет возвращена ошибка property ResponseText:string; //ответ от сервера property RawHeadersText:string; property AllowCookies:boolean; property BasicAuthentication: boolean; property ProxyPassword: string;//параметры прокси сервера если он есть property ProxyPort: Integer;//параметры прокси сервера если он есть property ProxyServer: string;//параметры прокси сервера если он есть property ProxyUsername: string;//параметры прокси сервера если он есть |
Обновление 1.0058:
1)Добавлена возможность делать Post и Get запросы к сайтам с SSL шифрованием т.е. начинающиеся с https://
в объект THTTP добавлены 2 метода:
a) SetSSLMethod(sslvSSL:byte), где параметр sslvSSL:byte может принимать значения от 0 до 5, что соответствует значениям системного перечисления в делфи TIdSSLVersion = (sslvSSLv2-0, sslvSSLv23-1, sslvSSLv3-2, sslvTLSv1-3,sslvTLSv1_1-4,sslvTLSv1_2-5);
данная процедура устанавливает свойство объекта TIdSSLIOHandlerSocketOpenSSL.SSLOptions.Method (по умолчанию свойство устанавливается значением sslvTLSv1) (см. документацию к Делфи по этому объекту)
б) SetSSLMode(sslm:Byte), где параметр sslm:Byte может принимать значения от 0 до 3, что соответствует значениям системного перечисления в делфи TIdSSLMode = (sslmUnassigned-0, sslmClient-1, sslmServer-2, sslmBoth-3);
данная процедура устанавливает свойство объекта TIdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode (см. документацию к Делфи по этому объекту)
Обновление 1.0059:
В объект THTTP добавлен метод AddHeader(ParamName,ParamValue:string); — добавляет заголовок к пост запросу…
Пример использования новых функций на примере функции подключения к API https://Exmo.me
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
Function AuthOnExmoZapros(List:TstringList;ZaprosName:string):string; var PublicKey:string; SecretKey:string; errorText:string; NonceStr:string; NonceTime:string; sign1:string;//,sign2:string; PostMessage:String; currentDate:Tdatetime; List2:TstringList; i:integer; getAuthPost:THTTP; begin PostMessage := ''; i:=0; List2 := TstringList.create(); LoadSettingsBDPkandSk(PublicKey, SecretKey); //Тут параметрам PublicKey и SecretKey присваиваются значения сохраненные в базе данных currentDate := Now(); NonceTime:= IntToStr(DateTimeToUnix(currentDate)); NonceStr := 'nonce='+ NonceTime; PostMessage := NonceStr; List2.add(NonceStr); while i < List.Count do begin List2.add(List.Names[i]+'='+List.ValueFromIndex[i]); PostMessage := PostMessage + '&' + List.Names[i]+'='+List.ValueFromIndex[i]; inc(i); end; sign1 := GetHMACSha512(PostMessage,SecretKey); //получаем код HMACSha512 getAuthPost := THTTP.Create; //создаем объект класса THTTP getAuthPost.Host := 'https://api.exmo.me/v1/'+ZaprosName;//user_open_orders';//user_info';//'; GetAuthPost.HandleRedirects := false; getAuthPost.AddHeader('ContentType','application/x-www-form-urlencoded'); getAuthPost.AddHeader('Sign',sign1); getAuthPost.AddHeader('Key',PublicKey); GetAuthPost.ReadTimeout := 5000; GetAuthPost.ConnectTimeout := 5000; getAuthPost.SetSSLMethod(1); getAuthPost.Post(List2,errorText); result := getAuthPost.text; getAuthPost.free; List2.free; end; Function CheckBalance():boolean; var List:TStringList; ExmoAnswer:string; begin result := false; List :=TStringList.create; ExmoAnswer := AuthOnExmoZapros(List,'user_info'); ShowMessage(ExmoAnswer); result := true; List.Free; end; |
Обновление 1.0064:
Добавлена процедура ClearHeader();, которая очищает все заголовки добавленные процедурой AddHeader