Libcurl - многопротокольная библиотека
Участников: 3
Страница 1 из 1
Libcurl - многопротокольная библиотека
Libcurl
libcurl это свободная и простая в использовании клиентская библиотека по передачи данных по URL, она поддерживает DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET и TFTP. Также libcurl имеет поддержку SSL сертификатов, HTTP POST, HTTP PUT, FTP загрузку, HTTP form загрузку, proxy, cookies, user+password авторизацию (Basic, Digest, NTLM, Negotiate, Kerberos), докачивания файлов, http прокси туннелирования и многого другого!
libcurl легко переносима, она собирается и работает на многих платформах, включая Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX, IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS и остальные...
libcurl свободна, потокобезопасна, совместима с IPv6, функциональна, имеет хорошую поддержку, быстрая, тщательно задокументирована и уже используется во многих известных, крупных и успешных компаний и в многочисленных приложениях.
Русская документация - от туда и будет пример ниже.
Оф сайт
Пример программы + подправленный curl.bi + dll библиотеки
на момент написания этой темы, уже существует версия curl-7.28.0. мы же будем использовать заголовочные файлы, поставляемые с FreeBasic - curl-7.24.0. версия не такая уж старая- январь 2012.
перед тем как использовать curl, нужно открыть файл "/inc/curl.bi" и найти там строку:
CINIT(STDERR, OBJECTPOINT, 37)
и переписать ее вот так:
CINIT(STDERR_, OBJECTPOINT, 37)
по традиции FreeBasic, после названия я поставил знак подчёркивания _.
дело в том, что макрос STDERR, пересекается с стандартным си макросом:
макросы это польза и зло. я два дня не мог врубится, в чем дело. возможно правильно, что в других языках от них избавляются.
пример программы, демонстрирует получение HTTP заголовка и HTML страницы. все это записывается в два файла, head.out и body.out.
для открытия файлов, я оставил оригинальные функции си, так как fb'шные тут не годятся.
libcurl это свободная и простая в использовании клиентская библиотека по передачи данных по URL, она поддерживает DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET и TFTP. Также libcurl имеет поддержку SSL сертификатов, HTTP POST, HTTP PUT, FTP загрузку, HTTP form загрузку, proxy, cookies, user+password авторизацию (Basic, Digest, NTLM, Negotiate, Kerberos), докачивания файлов, http прокси туннелирования и многого другого!
libcurl легко переносима, она собирается и работает на многих платформах, включая Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX, IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS и остальные...
libcurl свободна, потокобезопасна, совместима с IPv6, функциональна, имеет хорошую поддержку, быстрая, тщательно задокументирована и уже используется во многих известных, крупных и успешных компаний и в многочисленных приложениях.
Русская документация - от туда и будет пример ниже.
Оф сайт
Пример программы + подправленный curl.bi + dll библиотеки
на момент написания этой темы, уже существует версия curl-7.28.0. мы же будем использовать заголовочные файлы, поставляемые с FreeBasic - curl-7.24.0. версия не такая уж старая- январь 2012.
перед тем как использовать curl, нужно открыть файл "/inc/curl.bi" и найти там строку:
CINIT(STDERR, OBJECTPOINT, 37)
и переписать ее вот так:
CINIT(STDERR_, OBJECTPOINT, 37)
по традиции FreeBasic, после названия я поставил знак подчёркивания _.
дело в том, что макрос STDERR, пересекается с стандартным си макросом:
- Код:
#define STDERR_FILENO 2
extern import _iob(0 to 2) alias "_iob" as FILE
#define stderr (@_iob(STDERR_FILENO))
макросы это польза и зло. я два дня не мог врубится, в чем дело. возможно правильно, что в других языках от них избавляются.
пример программы, демонстрирует получение HTTP заголовка и HTML страницы. все это записывается в два файла, head.out и body.out.
для открытия файлов, я оставил оригинальные функции си, так как fb'шные тут не годятся.
- Код:
/'**************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://curl.haxx.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
**************************************************************************'/
#include "crt/stdio.bi"
#include "curl.bi"
function write_data(byval ptr_ as any ptr, byval size as size_t, byval nmemb as size_t, byval stream as any ptr) as size_t
dim as integer written = fwrite(ptr_, size, nmemb, stream)
return written
end function
function main() as integer
dim as CURL ptr curl_handle
static as zstring ptr headerfilename = @"head.out"
dim as FILE ptr headerfile
static as zstring ptr bodyfilename = @"body.out"
dim as FILE ptr bodyfile
curl_global_init(CURL_GLOBAL_ALL)
/' инициализация сессии curl '/
curl_handle = curl_easy_init()
/' установка URL '/
curl_easy_setopt(curl_handle, CURLOPT_URL, "http://freebasic.forum2x2.ru")
/' нам не нужно уведомление о прогрессе '/
curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L)
/' посылать все данные в эту функцию '/
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, @write_data)
/' открытие файлов '/
headerfile = fopen(headerfilename,"w")
if (headerfile = NULL) then
curl_easy_cleanup(curl_handle)
return -1
end if
bodyfile = fopen(bodyfilename,"w")
if (bodyfile = NULL) then
curl_easy_cleanup(curl_handle)
return -1
end if
/' помещать заголовки в этот файловый дескриптор '/
curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, headerfile)
/'
* Обратите внимание, если вы хотите выводить не в stdout,
* вам необходимо использовать опцию CURLOPT_WRITEDATA. '/
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, bodyfile) ' если убрать эту строчку, то html'ка выведется на экран
/' получить! '/
curl_easy_perform(curl_handle)
/' закрытие файлового дескриптора '/
fclose(bodyfile)
fclose(headerfile)
/' очистка '/
curl_easy_cleanup(curl_handle)
return 0
end function
end(main())
Последний раз редактировалось: electrik (Чт Ноя 22, 2012 1:36 pm), всего редактировалось 1 раз(а)
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Libcurl - многопротокольная библиотека
Спасибо.
P.S. Ссылочка на пример не совсем корректная (лишняя кавычка)
P.S. Ссылочка на пример не совсем корректная (лишняя кавычка)
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Libcurl - многопротокольная библиотека
Спасибо. ссылку подправил.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Непонятки с Libcurl
Пишу XML-RPC server, получающий от клиентов команды в виде XML-документов через HTTP POST. Возникла проблема:
Как только включаю в проект #Include "curl.bi", компилятор версии 0.90 начинает ругаться:
Как только включаю в проект #Include "curl.bi", компилятор версии 0.90 начинает ругаться:
на следующий фрагмент curl.bi:OrionAccess.bas(5) warning 12(0): Missing closing quote in literal string
C:\FreeBasic\Compilier\inc\curl.bi(1049) error 3: Expected End-of-Line, found 'HTTP/1.0' in 'CINIT(HTTP_VERSION, LONG, 84)'
- Код:
/' These enums are for use with the CURLOPT_HTTP_VERSION option. '/
enum
CURL_HTTP_VERSION_NONE
CURL_HTTP_VERSION_1_0
CURL_HTTP_VERSION_1_1
CURL_HTTP_VERSION_LAST
end enum
/'
* This macro-mania below setups the CURLOPT_[what] enum, to be used with
* curl_easy_setopt(). The first argument in the CINIT() macro is the [what]
* word.
'/
enum CURLoption
...
/' Specify which HTTP version to use! This must be set to one of the
CURL_HTTP_VERSION* enums set below. '/
CINIT(HTTP_VERSION, LONG, 84)
...
end enum
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Libcurl - многопротокольная библиотека
ошибка missing close literal string - это где-то ты забыл закрыть кавычку. может при объявлении заголовка, или в какой-нибудь строковой переменной.
во FreeBasic, есть манера выкладывать битые заголовки. и тянется это еще со старых версий.
попробуй скачать мой подправленный curl
ftp://el-zone.spb.ru/freebasic/libs/curl.rar
как они их делают, фиг знает. я когда переделываю заголовочные файлы, сразу на каком-нибудь примере тестирую. даже не на одном.
ладно бы у них была ошибка на какую-нибудь функцию которая редко используется и пример не всегда придумаешь, а вот на макросе CINIT...
скажу что там за ошибки.
используется два ключевых слова name и type.
я подправил на name_ и type_. думаю догадались в чем дело.
скорее всего, делалось это каким-нибудь wrapper'ом, которому пофиг на ключевые слова FreeBasic.
во FreeBasic, есть манера выкладывать битые заголовки. и тянется это еще со старых версий.
попробуй скачать мой подправленный curl
ftp://el-zone.spb.ru/freebasic/libs/curl.rar
как они их делают, фиг знает. я когда переделываю заголовочные файлы, сразу на каком-нибудь примере тестирую. даже не на одном.
ладно бы у них была ошибка на какую-нибудь функцию которая редко используется и пример не всегда придумаешь, а вот на макросе CINIT...
скажу что там за ошибки.
используется два ключевых слова name и type.
я подправил на name_ и type_. думаю догадались в чем дело.
скорее всего, делалось это каким-нибудь wrapper'ом, которому пофиг на ключевые слова FreeBasic.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Непонятки с Libcurl
Методом проб и ошибок выяснил, что ошибка появляется из-за подключаемого до curl.bi window9.bi. Если порядок подключения этих заголовков поменять, то ошибка вылетает уже в вызываемом из window9.bi zlib.bi Я пока решил проблему закомментировав в window9.bi подключение zlib.bielectrik пишет:ошибка missing close literal string - это где-то ты забыл закрыть кавычку.
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Libcurl - многопротокольная библиотека
ну думаю, что ты обновляешь window9? там и zlib, вродь тоже исправленный. поставляемый с FreeBasic, по крайней мере с 0.24 был глючный. 0.90 не проверял.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|