библиотека для работы с http

Предыдущая тема Следующая тема Перейти вниз

библиотека для работы с http

Сообщение  Eric-S в Вс Авг 31, 2008 2:06 pm

Если я не ошибаюсь, libcurl позволяет скачивать web-странички по протоколу http. Есть ли альтернативы?

Я хочу написать простой граббер веб-сайта, curl подойдёт?
В примерах есть get_http.bas.

В какую сторону рыть?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  tux в Вс Авг 31, 2008 3:51 pm

да помойму проще самому написать, вроде ниче особо сложного там нет
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  Eric-S в Вс Авг 31, 2008 5:01 pm

А ещё проще воспользоваться консольной утилиткой wget.

Но мучать сокеты, вместо простого запроса, уже можно считать извращением.

Короче сравню и посмотрю, что к чему. Но сравнивать пока несчем.

насколько я знаю, curl умеет ещё отправлять get и post запросы, которые уже сделать сложнее. Про поддержку защищённых протоколов я уже молчу. В прочем мне нужно просто просканировать и скачать контент сайта.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  tux в Пн Сен 01, 2008 8:29 am

Если те надо вики в исходника (как я понимаю ради етого все и затеял), то мона не катать каждую страничку а взять сдесь в архиве
http://downloads.sourceforge.net/fbc/FB-manual-0.20.0-wakka.tar.gz?download
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  diakin в Пт Апр 10, 2009 1:30 pm

Под windows один из вариантов

Код:

Declare Function URLDownloadToCacheFile Lib "urlmon" Alias "URLDownloadToCacheFileA" _
( lpUnkcaller As Long, _
szURL As String, _
byref szFileName As String, _
dwBufLength As Long, _
dwReserved As Long, _
IBindStatusCallback As Long) As Long

Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long

Function DownloadFile(URL As String) As String
Dim szFileName As String
szFileName = Space$(300)
szFileName =fname 'имя файла
zz=URLDownloadToCacheFile(0, URL, szFileName, Len(szFileName), 0, 0)
print"zz=";zz
If zz = 0 Then DownloadFile = Trim(szFileName)
End Function

diakin

Сообщения : 37
Дата регистрации : 2009-04-06
Откуда : С-Петербург

Посмотреть профиль http://miraxem.com

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  Eric-S в Сб Апр 11, 2009 5:35 am

Спасибо большое. Похоже интересная библиотечка.

Надо будет поковыряться в ней.
А интересно, может ли она отправлять данные. Скажем если я хочу чтобы робот заполнял формы или заливал файлы?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  diakin в Сб Апр 11, 2009 12:03 pm

Это надо смотреть здесь
wininet.bi


Пример какой-то сишный
Как эмулировать отправку данных формы на www-сервер при помощи WinInet

WWW.ИСХОДНИКИ.РУ

Для эмуляции отправки данных формы, необходимо отправить на сервер заголовок, содержащий правильный Content-Type. Для форм, заголовок Content-Type должен выглядеть следующим образом:

Content-Type: application/x-www-form-urlencoded
Во многих случаях, сервер может неправильно отреагировать, если в запросе не указан Content-Type. Например, компонент Active Server Pages вебсервера IIS 3.0 проверяет заголовок на наличие в нём 'application/x-www-form- urlencoded' перед тем, как добавить переменные формы в объект "Request.Form". Данный MIME/Content-Type указывает на то, что передаваемые данные это список URL-кодированных переменных формы. Под URL-кодированием понимается, что символы пробела (ASCII 32) будут закодированы как '+', а специальный символ, например, такой как '!' будет закодирован шестнадцатиричной форме как '%21'.

Вот кусок кода, использующего классы MFC WinInet для эмуляции запроса формы POST:

CString strHeaders =
_T("Content-Type: application/x-www-form-urlencoded");
// URL-кодированные переменные формы -
// name = "John Doe", userid = "hithere", other = "P&Q"
CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q");

CInternetSession session;
CHttpConnection* pConnection =
session.GetHttpConnection(_T("ServerNameHere"));
CHttpFile* pFile =
pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
_T("FormActionHere"));
BOOL result = pFile->SendRequest(strHeaders,
(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
Без MFC тот же код будет выглядет следующим образом:

static TCHAR hdrs[] =
_T("Content-Type: application/x-www-form-urlencoded");
static TCHAR frmdata[] =
_T("name=John+Doe&userid=hithere&other=P%26Q");
statuc TCHAR accept[] =
_T("Accept: */*");

// для понятности, проверка ошибок была удалена
HINTERNET hSession = InternetOpen("MyAgent",
INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"),
INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
HINTERNET hRequest = HttpOpenRequest(hConnect, "POST",
_T("FormActionHere"), NULL, NULL, accept, 0, 1);
HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));
// закрываем internet-дескрипторы

diakin

Сообщения : 37
Дата регистрации : 2009-04-06
Откуда : С-Петербург

Посмотреть профиль http://miraxem.com

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  diamass в Сб Май 30, 2009 12:52 am

diakin пишет:Под windows один из вариантов
Код:

Всё цитировать не буду.

Function DownloadFile(URL As String) As String
' Необъявленная переменная:
Dim zz as integer
Dim szFileName As String
szFileName = Space$(300)

' Эта строка не понятна, что означает имя файла?
szFileName =fname 'имя файла
zz=URLDownloadToCacheFile(0, URL, szFileName, Len(szFileName), 0, 0)
print"zz=";zz
If zz = 0 Then DownloadFile = Trim(szFileName)
End Function

'Не знаю, правильно ли я понял, но дописал следующее:

dim filehost as string
filehost = DownloadFile("http://sitedia.narod.ru/index.html")
print filehost

Ну, и ясное дело компилятор запускается, делает вид, что он чего-то скомпилил, но EXE не получается.
А ежели всё что ниже функции удалить, а саму функцию сделать на внешку export
Ну и в ком-строке тоже, разумеется указать -dll
То всё равно ничё не компилится, а только делает вид.
При этом никаких ошибок не возникает.
Чего ему надобно?

diamass

Сообщения : 4
Дата регистрации : 2009-05-29
Возраст : 48
Откуда : Невинномысск

Посмотреть профиль http://sitedia.narod.ru/

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  tux в Сб Май 30, 2009 9:23 pm

а вы декларацию функций оставили?
возможно просто возникает ошибка при компиляции, которую вы не замечаете, попробуйте скомпилить с опцией -v и посмотреть на вывод компилятора
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  diamass в Вс Май 31, 2009 2:13 am

tux пишет:а вы декларацию функций оставили?

Да, конечно.

возможно просто возникает ошибка при компиляции, которую вы не замечаете, попробуйте скомпилить с опцией -v и посмотреть на вывод компилятора

D:\FreePrograms\FreeBASIC\fbc.exe -v -dll TWeb.bas > Error_dll.txt 2>&1

Я прошу прощения, но я плохо дружу с английским, поэтому не понятно чего он мне нагрузил:

compiling: TWeb.bas -o TWeb.asm
assembling: D:\FreePrograms\FreeBASIC\bin\win32\as.exe --32 --strip-local-absolute "TWeb.asm" -o "TWeb.o"
linking: -T "D:\FreePrograms\FreeBASIC\lib\win32\i386pe.x" -subsystem console --dll --enable-stdcall-fixup --export-dynamic -e _DllMainCRTStartup@12 -s --stack 1048576,1048576 -L "D:\FreePrograms\FreeBASIC\lib\win32" -L "./" "D:\FreePrograms\FreeBASIC\lib\win32\dllcrt2.o" "D:\FreePrograms\FreeBASIC\lib\win32\crtbegin.o" "TWeb.o" -o "TWeb.dll" -( -lurlmon -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "D:\FreePrograms\FreeBASIC\lib\win32\fbrt0.o" -) "D:\FreePrograms\FreeBASIC\lib\win32\crtend.o" --output-def "TWeb.def"
D:\FreePrograms\FreeBASIC\bin\win32\ld.exe: cannot find -lurlmon

diamass

Сообщения : 4
Дата регистрации : 2009-05-29
Возраст : 48
Откуда : Невинномысск

Посмотреть профиль http://sitedia.narod.ru/

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  tux в Вс Май 31, 2009 9:22 am

процесс компиляции состоит из 3-х основных этапов, которые fbc делает сам, особо не мороча голову, но на всякий случай понимать это тоже надо.
1) преобразовывает код из синтаксиса бейсика в ассемблеровский
2) компиляция этого кода ассемблером в объектный файл
3) сборка линкером всех объектных файлов (файл самой программы и файлы различных подключаемых библиотек) в единый исполняемый
на последнем этапе как раз и вылезла ошибка
D:\FreePrograms\FreeBASIC\bin\win32\ld.exe: cannot find -lurlmon
сообщающая что библиотека urlmon не найдена, возможно ее надо отдельно качать, а можона есть в венде, я просто етого не знаю, но смысл в том что ее просто нигде нет, поетому и не удается получить исполняемый файл
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  diamass в Вс Май 31, 2009 11:24 pm

3) сборка линкером всех объектных файлов (файл самой программы и файлы различных подключаемых библиотек) в единый исполняемый
на последнем этапе как раз и вылезла ошибка
D:\FreePrograms\FreeBASIC\bin\win32\ld.exe: cannot find -lurlmon
сообщающая что библиотека urlmon не найдена, возможно ее надо отдельно качать, а можона есть в венде, я просто етого не знаю, но смысл в том что ее просто нигде нет, поетому и не удается получить исполняемый файл[/quote]

Хмм. Странно, но этот файл ld.exe находится именно по указанному пути.
D:\FreePrograms\FreeBASIC\bin\win32\ld.exe
Дата создания: 01.12.2005 7:00 Размер: 641 КБ 641 КБ Мой компьютер

diamass

Сообщения : 4
Дата регистрации : 2009-05-29
Возраст : 48
Откуда : Невинномысск

Посмотреть профиль http://sitedia.narod.ru/

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  tux в Пн Июн 01, 2009 1:36 pm

да нее...
D:\FreePrograms\FreeBASIC\bin\win32\ld.exe - это и есть сам линкер, а он сообщает, что не модет найти библиотеку urlmon, котрорая должна находится либо в дирректории D:\FreePrograms\FreeBASIC\lib, либо гдето в системных дирректориях винды, и называться она должна liburlmon.a, и похоже но ее ищет как статическую, у меня есть такое подозрение, что это ваще какаето левая библиотека, которую отдельно надо скачавать, либо, если это виндовая библиотека, то не удается ее найти
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: библиотека для работы с http

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения