Страница 18 из 30
					
				libcurl for Clarion
				Добавлено: 12 Ноябрь 2015, 20:11
				 Дед Пахом
				Вроде все основные функции закрыл:
- выгрузка файлов с сервера
- загрузка файлов на сервер
- HTTP GET/POST с возможностью прочитать ответ сервера
- Поддержка SSL
Тестировал на протоколах http, https, ftp, sftp, ftpes.
Краткий туториал в файле \doc\How-To.txt.
 
 
 
			 
			
					
				libcurl for Clarion
				Добавлено: 21 Август 2018, 14:43
				 Дед Пахом
				В принципе, константу вроде тоже можно, только через ж:
curl.SetOpt(CURLOPT_USERAGENT, ADDRESS('My User Agent<0>'))
			 
			
					
				libcurl for Clarion
				Добавлено: 21 Август 2018, 15:01
				 Игорь Столяров
				Спасибо, я думаю, что это лишнее. 

 Нет никакой проблемы завести переменную.
Здесь главное понять, чего партия хочет от народа ... 
Потому, что сервисы похожи на визу в США: ты вроде всё передал, что просили. 
А они назад тебе фигу. Причём молча, без указания причины отказа. 

 
			 
			
					
				libcurl for Clarion
				Добавлено: 21 Август 2018, 19:12
				 Дед Пахом
				v1.31 решает проблему с большими письмами.
			 
			
					
				libcurl for Clarion
				Добавлено: 22 Август 2018, 8:25
				 Игорь Столяров
				По своему небольшому опыту работы с запросами LibCurl, хочу сказать, что многие
сервисы не очень рады таким запросам. Это если сказать без мата.
Поэтому лучше всегда сразу маскироваться под рабочую пчелу. 
Код: Выделить всё
Loc:UserAgent  CSTRING('Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)')
   Code   
   Curl.Init()
   Curl.SetOpt(CURLOPT_USERAGENT,  Loc:UserAgent)
   Curl.SetOpt(CURLSSH_AUTH_AGENT, Loc:UserAgent)
   ...   
Однако ! 

 
			 
			
					
				libcurl for Clarion
				Добавлено: 22 Август 2018, 22:35
				 Игорь Столяров
				Имею непреодолимое желание поделиться некоторыми наблюдениями по работе
с LibCurl, т.к. целый день продолбился с подключением к сервису.
(спасибо за DebugView иначе проблемы были бы неразрешимыми)
1. Если выполнить вполне однозначное действие:
Код: Выделить всё
  Curl.Init()
  Curl.FreeHttpHeaders()
  Curl.SendRequest( ….
Результат будет весьма неожиданным. В заголовке запроса будет несколько строк, 
которые никто туда добавлять не просил … Приходится убирать их принудительно:
Код: Выделить всё
  Curl.AddHttpHeader('Accept:')
  Curl.AddHttpHeader('Content-Type:')
  Curl.AddHttpHeader('Expect:')
2. Некоторые сервисы излишне нервно относятся к параметру размера запроса.
    А LibCurl добавляет вот такой параметр в заголовок запроса по умолчанию:
   Где 1234 - ОБЩИЙ размер запроса с учётом HEADER. А должен быть только размер тушки запроса (BODY).
   Поэтому для того, что бы отправить пустой запрос, параметры которого задаются в шапке, приходится 
   принудительно выставлять:
    Иначе сервис подвисает на TIMEOUT и возвращает ошибку "No BODY !" (видимо ожидает запрос указанного размера).
    И ожидаю проблемы (завтра), когда придётся отправлять уже запросы с содержанием, т.к. их размер надо будет
    считать вручную, причём до выполнения Curl.SendRequest() … Про 
Код: Выделить всё
  Curl.SetOpt(CURLOPT_POSTFIELDS, 'что-там')
  Curl.SetOpt(CURLOPT_POSTFIELDSIZE, LEN(CLIP('что-там')))
знаю, но они видимого эффекта на Content-Length в шапке запроса не оказывают.
Как-то оно так ! 

 
			 
			
					
				libcurl for Clarion
				Добавлено: 23 Август 2018, 8:44
				 Игорь Столяров
				Есть вопрос …
Сервис возвращает ответ на запрос:
Код: Выделить всё
[4700] [libcurl] HEADER_IN: HTTP/1.1 200 OK 
[4700] [libcurl] HEADER_IN: Date: Thu, 23 Aug 2018 05:08:07 GMT 
[4700] [libcurl] HEADER_IN: Content-Type: application/octet-stream 
[4700] [libcurl] HEADER_IN: Content-Length: 172 
[4700] [libcurl] HEADER_IN: Connection: keep-alive 
[4700] [libcurl] HEADER_IN: Access-Control-Allow-Origin: * 
[4700] [libcurl] HEADER_IN:  
[4700] [libcurl] DATA_IN: Session key: J6rUWkuLyghvn/i/y9nSbAszyICal/BGOxM2B
[4700] [libcurl] TEXT: Curl_http_done: called premature == 0
Ключ доступа получаем в тушке ответа на запрос - без проблем.
А как получить данные из заголовка ответа ? Конкретно нужен статус успешности запроса (200).
Ведь LibCurl получает заголовок ответа. Можно ли получить его из LibCurl ?
 
			 
			
					
				libcurl for Clarion
				Добавлено: 23 Август 2018, 10:36
				 Дед Пахом
				Игорь Столяров писал(а): 23 Август 2018, 8:44А как получить данные из заголовка ответа ? Конкретно нужен статус успешности запроса (200).
 
rc = curl.GetResponseCode()
 
			 
			
					
				libcurl for Clarion
				Добавлено: 23 Август 2018, 11:46
				 Дед Пахом
				Игорь Столяров писал(а): 23 Август 2018, 8:44А как получить данные из заголовка ответа ?
 
В общем случае для получения полей заголовка используйте методы
Код: Выделить всё
GetInfo::LONG                   PROCEDURE(CURLINFO info), LONG
GetInfo::SLIST                  PROCEDURE(CURLINFO info), LONG
GetInfo::STRING                 PROCEDURE(CURLINFO info), STRING
GetInfo::DOUBLE                 PROCEDURE(CURLINFO info), REAL
где параметр info - одно из значений перечисления CURLINFO, начиная с
Код: Выделить всё
CURLINFO_EFFECTIVE_URL        EQUATE(CURLINFO_STRING + 1)
 
			 
			
					
				libcurl for Clarion
				Добавлено: 24 Август 2018, 6:00
				 Игорь Столяров
				Спасибо ! А подскажите пожалуйста какие-нибудь интересные сервисы, 
с которыми можно попробовать поработать через LibCurl + REST API … 

 
			 
			
					
				libcurl for Clarion
				Добавлено: 24 Август 2018, 11:57
				 RaFaeL
				Мы работаем с Дататой, Контур-апи, Гуглокалендарем и десятком разных айпи-телефоний. Еще с Битрикса заказы забираем но там без REST
			 
			
					
				libcurl for Clarion
				Добавлено: 24 Август 2018, 12:10
				 Игорь Столяров
				RaFaeL писал(а): 24 Август 2018, 11:57Мы работаем с Дататой, Контур-апи
 
С дадатой Вы классный пример выкладывали. 

С Контуром (Диадок) я пробовал работать. В принципе - подключиться получается, но там навёрнутые структуры данных ... 

 
			 
			
					
				libcurl for Clarion
				Добавлено: 25 Август 2018, 6:10
				 Игорь Столяров
				Просто подтвердите пожалуйста правильность моего утверждения.
Правильно ли я понимаю, что сейчас в LibCurl не реализован выбор версии HTTP протокола ?
Это то, что из командной строки делается вот так:
 
			 
			
					
				libcurl for Clarion
				Добавлено: 25 Август 2018, 11:37
				 Дед Пахом
				Как это может быть, если curl это оболочка над libcurl?
			 
			
					
				libcurl for Clarion
				Добавлено: 25 Август 2018, 11:51
				 Игорь Столяров
				Я любопытствую про обёртку LibCurl для Clarion.
Не нашёл параметра CURLOPT_HTTP_VERSION для SetOpt(), ну и значения для этого параметра ...
			 
			
					
				libcurl for Clarion
				Добавлено: 25 Август 2018, 12:33
				 Дед Пахом
				Я не все ещё CURLOPT-константы перенёс в Clarion, делаю это в основном по запросам пользователей.
Вот так будет в след. версии:
Код: Выделить всё
CURLOPT_HTTP_VERSION          EQUATE(84 + CURLOPTTYPE_LONG)             !Specify which HTTP version to use! This must be set to one of the CURL_HTTP_VERSION* enums set below.
!  /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ 
CURL_HTTP_VERSION_NONE              EQUATE(0)                           !setting this means we don't care, and that we'd like the library to choose the best possible for us!
CURL_HTTP_VERSION_1_0               EQUATE(1)                           !please use HTTP 1.0 in the request
CURL_HTTP_VERSION_1_1               EQUATE(2)                           !please use HTTP 1.1 in the request
CURL_HTTP_VERSION_2_0               EQUATE(3)                           !please use HTTP 2 in the request
CURL_HTTP_VERSION_2TLS              EQUATE(4)                           !use version 2 for HTTPS, version 1.1 for HTTP
CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE EQUATE(5)                           !please use HTTP 2 without HTTP/1.1 Upgrade
CURL_HTTP_VERSION_LAST              EQUATE(6)                           !*ILLEGAL* http version