libcurl for Clarion

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3130
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

Изображение

Вроде все основные функции закрыл:
- выгрузка файлов с сервера
- загрузка файлов на сервер
- HTTP GET/POST с возможностью прочитать ответ сервера
- Поддержка SSL

Тестировал на протоколах http, https, ftp, sftp, ftpes.

Краткий туториал в файле \doc\How-To.txt.
Последний раз редактировалось Дед Пахом 31 Октябрь 2020, 20:39, всего редактировалось 1 раз.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7314
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libcurl for Clarion

Сообщение Игорь Столяров »

Спасибо ! А можно вопрос, я еще не долез в этом месте в описании ...
cURL реализует только операции обмена файлами ?
Можно ли получить список файлов в папке на сервере ?
Удалить файл в папке на сервере ?

Спасибо. И извиняюсь, за возможную тупость вопросов.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3130
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

Да, в curl всё это есть, у меня нет пока ;-) Нельзя объять необъятное вот так сразу :-)
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3130
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

Вы будете смеяться, но список файлов можно получить уже сейчас, прямо в демке, надо только указать url со слэшем на конце, чтобы дать понять -- нам нужен каталог. Вот что я получил в выходном файле:
-rw-r--r-- 1 ded ded 169 Nov 12 18:58 response.txt
drwxr-x--x 2 ded ded 4096 Nov 12 18:58 .
dr-x-----x 3 ded mgrsecure 4096 Nov 11 14:29 ..
-rw------- 1 ded ded 47 Nov 11 14:31 .bash_history
С уважением, ДП
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

libcurl for Clarion

Сообщение pansoft »

Большое спасибо за библиотеку!

В ЕГАИС используются команды:
1) Команда: curl -x DELETE http://localhost:8080/opt/in/201 - удаление из базы
2) Команда: curl -f "xml_file=@cheque.xml" http://localhost:8080/xml - отправка файла через http
Дед Пахом писал(а): Нельзя объять необъятное вот так сразу
Но если продолжите, то начните пожалуйста с этих команд.

Заранее благодарен.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3130
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

pansoft писал(а): 2) Команда: curl -f "xml_file=@cheque.xml" http://localhost:8080/xml - отправка файла через http
А с этим-то какие проблемы?
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4545
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

libcurl for Clarion

Сообщение finsoftrz »

Если кому интересно, открыт отдельный опенсорсный проект для работы с командной строкой curl. Запуск осуществляется через процесс, используется обычное окно с прогрессом и возможностью прерывания вместо dos-окна (как при запуске через run). Поддерживается отправка почты через ssl-соединения с прикреплением файлов. Место прописки класса:

http://www.finsoftrz.ru/download/clarion/fsCurl.7z

Пример использования для отправки почты:

Код: Выделить всё

test_r routine
   DATA
fsCurlL &fsCurl
lor:ok  byte
   CODE

   fsCurlL &= new(fsCurl)
   fsCurlL.init()

   fsCurlL.WindowTitle='Отправка письма...'

   fsCurlL.SetUrl('smtps://smtp.yandex.ru:465','userName','userPswd')
   fsCurlL.SetMailHeader('adress1@yandex.ru','adress2@gmail.com','Отправитель','Получатель')
   fsCurlL.SetMailText('Тест','Текст тестового сообщения...')

   lor:ok=fsCurlL.MailHeaderAdd()
   if lor:ok=1
      lor:ok=fsCurlL.MailFileAdd('1.xls')
   .
   if lor:ok=1
      lor:ok=fsCurlL.MailFileAdd('1.txt')
   .

   if lor:ok=1
      if fsCurlL.MailSend()=1
         message('Успех!')
      .
   .

   fsCurlL.kill
   dispose(fsCurlL)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3130
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

v1.01
v1.01

- .SetCustomRequest method, for customizing the get command like HTTP: DELETE, TRACE and others
- .GetResponseCode method returns HTTP or FTP response code
- constants to use in .SetOpt(curlopt_constant):
- CURLOPT_HEADER throw the header out too
- CURLOPT_NOBODY use HEAD to get http document
- CURLOPT_POST HTTP POST method
- CURLOPT_DIRLISTONLY (CURLOPT_FTPLISTONLY) bare names when listing directories
- CURLOPT_APPEND Append instead of overwrite on upload!
- CURLOPT_PUT HTTP PUT
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7314
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

libcurl for Clarion

Сообщение Игорь Столяров »

finsoftrz писал(а): для работы с командной строкой curl
Можно уточнить: под Windows x64 эта технология будет работать ?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4545
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

libcurl for Clarion

Сообщение finsoftrz »

Да, работает. Только что проверил на всякий случай отправку почты с файлами из тестовой программы.
C6/C11, ШВС, tps/btrieve.
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

libcurl for Clarion

Сообщение pansoft »

Дед Пахом писал(а):
pansoft писал(а): 2) Команда: curl -f "xml_file=@cheque.xml" http://localhost:8080/xml - отправка файла через http
А с этим-то какие проблемы?
При выполнении в командной строке

curl.exe -F "xml_file=@client.xml" http://localhost:8080/opt/in/QueryPartner
Curl.jpg
после отправки файла сразу приходит ответ, как при
SendRequest(Send, HttpHeaders, SSLInfo, bGetServerResponse, bSaveServerResponseToFile).

, а WriteFile возвращает 0 или Номер ошибки.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3130
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

Ну WriteFile всё-таки для Ftp в основном, для Http надо файлы слать через POST запрос c параметрами:
curl.AddHttpHeader('Content-Type: multipart/form-data')
curl.SetHttpHeaders()

postParams = 'xml_file='& filecontent
res = curl.SendRequest(url, postParams, outfile)
С уважением, ДП
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

libcurl for Clarion

Сообщение pansoft »

Выдает ошибку:

Код: Выделить всё

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 500 Server Error</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /opt/in/QueryPartner. Reason:
<pre>    Server Error</pre></p><h3>Caused by:</h3><pre>javax.servlet.ServletException: Content-Type != multipart/form-data
	at org.eclipse.jetty.server.Request.getParts(Request.java:2051)
	at org.eclipse.jetty.server.Request.getPart(Request.java:2043)
	at es.programador.http.ClientDocumentServlet.a(ClientDocumentServlet.java:201)
	at es.programador.http.ClientDocumentServlet.doPost(ClientDocumentServlet.java:96)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
	at org.eclipse.jetty.server.Server.handle(Server.java:370)
	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
	at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)
	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
	at java.lang.Thread.run(Unknown Source)
</pre>
<hr /><i><small>Powered by Jetty://</small></i><br/>                                                
</body>
</html>
Я полазил по форумам пишут что при multipart/form-data
PostParams должен быть массивом.

Код: Выделить всё

<?php

$ch = curl_init();

$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');

curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);
?>
полный текст на http://ru.php.net/curl_setopt

ДП, спасибо за быстрые ответы!
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

libcurl for Clarion

Сообщение Admin »

pansoft писал(а): PostParams должен быть массивом.
Попробуйте задать по принципу:

Код: Выделить всё

PostParams = 'data=text&data2=text2&data3=text%20width%20space'
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
pansoft
Бывалый
Сообщения: 76
Зарегистрирован: 08 Август 2011, 11:37

libcurl for Clarion

Сообщение pansoft »

Admin писал(а):
pansoft писал(а): PostParams должен быть массивом.
Попробуйте задать по принципу:

Код: Выделить всё

PostParams = 'data=text&data2=text2&data3=text%20width%20space'
Я так понял надо добавить '%20width%20space'
Попробовал:
PostParams ='xml_file=@client.xml%20width%20space'
И
PostParams ='data=text&xml_file=@client.xml%20width%20space'
и
PostParams ='xml_file=@client.xml%data=text%20width%20space'
Ошибка та же.
Закрыто