Вверх ↑
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
#1: 2010-01-23 20:03:47 ЛС | профиль | цитата
Нашёл в Сети обёртку над libCurl:

libcurl is a free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer resume, http proxy tunneling and more!


Вольный перевод:

libcurl - бесплатная и удобная клиентская библиотека для работы с протоколами FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS и FILE. Поддерживает SSL-сертификаты, HTTP POST, HTTP PUT, FTP PUT, файлы в HTTP формах, прокси, cookies, HTTP-авторизацию (Basic, digest, NTLM, kerberos v4), продолжение (resume) закачек, туннелирование трафика через HTTP-прокси, и многое другое.


С VCL не связана никак, но может потребоваться механическая доработка. Обёртка весьма занятная - 2 в 1: прямая трансляция h->pas (плюс bash-скрипт для перегенерации) и объектная надстройка. Совместима и с DCC (Delphi), и с FPC (Lazaurus).

Собственно было бы неплохо на основе этого сделать компоненты для HiAsm. В прищепке: curl.rar - минимально достаточный набор файлов обёртки (оставлены только обёртки и документация), на файлообмене - сама библиотека плюс вспомогательные библиотеки для работы с шифрованием плюс документация.




С Delphi я не дружу особо, поэтому могу только концепцию нарисовать:

1. Curl_easy:

Менеджер, интерфейс CURL_E.

При создании вызывается curl_easy_init, результат (pCURL) сохраняется для последующего использования. При удалении вызывается curl_easy_cleanup. Клиенты имеют доступ с сохранённому pCURL.

(опционально) Получение версии библиотеки через [http://curl.haxx.se/libcurl/c/curl_version_info.html]curl_version_info[/url]

2. curl_easy_setopt:

Клиент для CURL_E. Тупо набор всех опций (бОльшая часть - скрыта), кроме Callback.

3. curl_easy_perform:

Клиент для CURL_E и CURL_EFORM. Вызов одноименной функции, доступ к результату. Скорее всего, сюда придётся перенести часть опций: URL, метод, ...

4. curl_easy_getinfo:

Получение информации о результате вызова curl_easy_perform.

5. curl_formadd:

Менеджер, интерфейс CURL_EFORM.

Сборка HTTP POST-запроса. Возможно, разбить на два: curl_form [м:CURL_EFORM_INTERNAL, CURL_EFORM] (конструктор - первый вызов, деструктор - curl_formfree) и curl_form_add [к: CURL_EFORM_INTERNAL] (только добавление поля).



Если нужно - могу перевести соответствующие статьи справки на русский.
карма: 1

2
файлы: 1curl.rar [70.4KB] [382]
Голосовали:GAv, Konst
vip
#1.1контекстная реклама от партнеров
Ответов: 578
Рейтинг: 14
#2: 2010-01-24 11:20:50 ЛС | профиль | цитата
HTTPS очень не хватает в хиасме, было бы круто если бы кто нибудь портировал этот curl
карма: 0

0
Ответов: 5446
Рейтинг: 323
#3: 2010-01-24 12:46:46 ЛС | профиль | цитата
Начал делать.
карма: 1

0
Ответов: 5227
Рейтинг: 586
#4: 2010-01-24 12:59:46 ЛС | профиль | цитата
GanjaKyp писал(а):
HTTPS очень не хватает в хиасме

да помоему и сейчас можно


#bas
' Закачка бинарного (не текстового) файла по HTTPS и сохранение его на локальном жёстком диске:

login = "имя"
password = "пароль"
Set x = CreateObject("WinHttp.WinHttpRequest.5.1")
call x.Open("GET", "https://secure.eicar.org/download/eicarcom2.zip", 0, login, password)
x.Send()
Set s = CreateObject("ADODB.Stream")
s.Mode = 3
s.Type = 1
s.Open()
s.Write(x.responseBody)
call s.SaveToFile("C:\eicarcom2.zip", 2)
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 5446
Рейтинг: 323
#5: 2010-01-24 13:09:33 ЛС | профиль | цитата
Ловлю забавную глюк(?): код
#pas
{type}
curl_infotype = (
CURLINFO_TEXT = 0, //строка 50
CURLINFO_HEADER_IN,
CURLINFO_HEADER_OUT,
CURLINFO_DATA_IN,
CURLINFO_DATA_OUT,
CURLINFO_SSL_DATA_IN,
CURLINFO_SSL_DATA_OUT,
CURLINFO_END
);

проглатывается FPC без проблем, а Delphi ругается:
C:\Program Files (x86)\HiAsm\Elements\delphi\code\curl_h.pas(50) Error: ',' or ')' expected but '=' found

Наверняка Dilma, nesco и другие уже встречались с такими "взбрыками" D4 - как это лечить?
------------ Дoбавленo в 13.10:
andrestudio, твоё решение тоже имеет право на существование. Однако решение в виде компонентов тоже нужно.
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#6: 2010-01-24 13:40:33 ЛС | профиль | цитата
iarspider, ты знаешь, но мне такое не попадалось, пока еще. Но в этом случае, я бы выкинул дефолтную установку переменной в 0.
карма: 22

0
Ответов: 5446
Рейтинг: 323
#7: 2010-01-24 13:50:12 ЛС | профиль | цитата
nesco, это не переменные, а enumeration.
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#8: 2010-01-24 13:54:02 ЛС | профиль | цитата
iarspider писал(а):
enumeration

Структура, что ли
Ты бы привел весь кусок кода, проще было бы
карма: 22

0
Ответов: 5446
Рейтинг: 323
#9: 2010-01-24 13:54:43 ЛС | профиль | цитата
nesco, в первом посте - архив, в нём curl_h.pas, строка 57 (несоответствие строк - из-за подчистки кода)
------------ Дoбавленo в 13.57:
nesco, enumeration - это такой тип, принимающий фиксированный набор (именованных) значений.
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#10: 2010-01-24 14:13:36 ЛС | профиль | цитата
iarspider писал(а):
enumeration - это такой тип, принимающий фиксированный набор (именованных) значений

Никогда не встречался с этим типом.
Я так понимаю, что эти значения не изменяются, те, они -- константы. Но вот и опиши их как константы, а в теле типа дай их название без присвоения значения

карма: 22

0
Ответов: 5446
Рейтинг: 323
#11: 2010-01-24 14:19:02 ЛС | профиль | цитата
nesco, видимо так и придётся. Я посмотрел наши коды - везде значения объявлены через const, а тип - как cardinal.
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#12: 2010-01-24 14:21:31 ЛС | профиль | цитата
iarspider писал(а):
видимо так и придётся

От классического построения описания еще никто не страдал
карма: 22

0
Ответов: 3851
Рейтинг: 159
#13: 2010-01-24 15:20:21 ЛС | профиль | цитата

andrestudio писал(а):
Закачка бинарного (не текстового) файла по HTTPS и сохранение его на локальном жёстком диске

на этот старый скрипт ругался антивирус, сейчас не вспомню какой..
карма: 0
начавший
0
Ответов: 5227
Рейтинг: 586
#14: 2010-01-24 15:28:03 ЛС | профиль | цитата
Андрей., когда вспомнишь то увидишь что там другой объект используется CreateObject("MSXML2.XMLHTTP"), каспер всё ещё его не любит.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 5446
Рейтинг: 323
#15: 2010-01-24 16:31:14 ЛС | профиль | цитата
nesco, для меня (в силу основной специализации --- C/C++) классической кажется приведённая запись (аналог enum).
------------ Дoбавленo в 16.32:
Стоп номер два: наш (4й) дельфи ещё не знает про функции с переменным числом аргументов Придётся изгалаяться
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)