POST и GET запросы
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
POST и GET запросы
Clarion 8 ABC
Помогите пож-та. Совсем не знаком с данной темой:
передача файла с использованием POST запроса с определенным content-type и передачей файла в теле запроса.
А также GET запрос. Где копать, с чего начать ???
Помогите пож-та. Совсем не знаком с данной темой:
передача файла с использованием POST запроса с определенным content-type и передачей файла в теле запроса.
А также GET запрос. Где копать, с чего начать ???
Re: POST и GET запросы
Недавно, 22 февраля обсуждали похожую проблему.
http://forum.clarionlife.net/phpbb/view ... ead#unread
Возможно, если особых требований нет, класс CHTTP вполне самодостаточен.
http://forum.clarionlife.net/phpbb/view ... ead#unread
Возможно, если особых требований нет, класс CHTTP вполне самодостаточен.
Re: POST и GET запросы
А где взять класс CHTTP ?Yufil писал(а):Недавно, 22 февраля обсуждали похожую проблему.
http://forum.clarionlife.net/phpbb/view ... ead#unread
Возможно, если особых требований нет, класс CHTTP вполне самодостаточен.
Re: POST и GET запросы
Там же сказано - написать письмо...
Выгрузил свой каталог с классами и примером на http://files.mail.ru/717378EC938A4F33BE91E4E76FDB7002
Выгрузил свой каталог с классами и примером на http://files.mail.ru/717378EC938A4F33BE91E4E76FDB7002
Re: POST и GET запросы
Примерно так:
1 В секцию данных положить include('Chttp.inc')
2 Там, где нужен обмен с сервером, декларируем объект класса
! Если устраивают стандартные сообщения об ошибках
! Или, если надо самому выводить
3. У нас есть (откуда-то снаружи) имя сервера, номер порта и имя файла.
Например, мы хотим скачать index.html с mail.ru, тогда сервер - mail.ru, а файл - index.html
А вот если я текущую страницу хочу загрузить, я в качестве сервера укажу forum.clarionlife.net,
а в качестве файла - phpbb/posting.php?mode=reply&f=1&t=3180&sid=9bcfc9b5b72d5ce3a133ad1e7504809f
Оставим за кадром отрезание http:// от адреса, выделение порта из имени сервера...
4. Соединяемся с сервером
5. Загружаем файл
Можно имя файла и не указывать, тогда скачанные данные лежат в переменной H.Response
6. Если нужно что-то отправить по протоколу Post, надо подготовить список Post-переменных и указать их значения
Для этого информируем класс о переменных
В каталоге есть убогий примерчик ftptest, где можно немного поиграться...
1 В секцию данных положить include('Chttp.inc')
2 Там, где нужен обмен с сервером, декларируем объект класса
! Если устраивают стандартные сообщения об ошибках
Код: Выделить всё
H CHTTP
Код: Выделить всё
H CLASS(CHTTP) !Класс CHTTP
Throw Procedure(String Str,Long Level),Long,Proc,Virtual
End
! И, в локальных процедурах помещаем код
H.Throw Procedure(String Str,Long Level)
! Str - текст сообщения об ошибке
! Level - уровень ошибки. Если Level=0-просто информация
Code
! Куда-то выводим информацию об ошибке...
....
Return(Level)
Например, мы хотим скачать index.html с mail.ru, тогда сервер - mail.ru, а файл - index.html
А вот если я текущую страницу хочу загрузить, я в качестве сервера укажу forum.clarionlife.net,
а в качестве файла - phpbb/posting.php?mode=reply&f=1&t=3180&sid=9bcfc9b5b72d5ce3a133ad1e7504809f
Оставим за кадром отрезание http:// от адреса, выделение порта из имени сервера...
4. Соединяемся с сервером
Код: Выделить всё
If H.Connect(HTTPServer,Glo:HTTPPort)<>0
Message('Ошибка:' & H.Error)
H.Disconnect()
Return....
End
Код: Выделить всё
If H.GetData(Адресфайла, КудаПоложитьФайлНаДиск) ! H.GetData('index.html','c:\index.html')
Message('Ошибка:' & H.Error)
H.Disconnect()
Return.
End
6. Если нужно что-то отправить по протоколу Post, надо подготовить список Post-переменных и указать их значения
Для этого информируем класс о переменных
Код: Выделить всё
H.AddData('Var1','Значение Post-переменной Var1')
H.AddData('Var2','Значение Post-переменной Var2')
.....
И отправляем, как и раньше
If H.POSTData(Ссылка)
Message('Ошибка:' & H.Error)
H.Disconnect()
Return ...
End
И, как и ранее, ответ лежит в H.Response
Re: POST и GET запросы
Просьба к Yufil - помогите разобраться !
Нужно отправлять следующие запросы:
1.запрос на проверку:
https://mkassa.byro.ru/payment2/?CmdID= ... =102412582
2.получение ответа о проверке:
https://mkassa.byro.ru/payment2/?CmdID= ... =102412582
Делаю следующее:
!---------------------------------------------------------------------------
ConnectHTTP ROUTINE
DO Createfile
HTTPServer = 'mkassa.byro.ru'
HTTPPort = 80
IF H.Connect(HTTPServer,HTTPPort) = 0
DO PostHTTP
ELSE
MESSAGE('0) Ошибка: ' & H.Error,'Внимание !!!',ICON:Exclamation)
END
H.Disconnect()
!---------------------------------------------------------------------------
PostHTTP ROUTINE
IF H.PostData('payment2/?CmdID=NEW_COMMAND&FNAME=' & CLIP(Stringpath1),'POST\' & CLIP(Stringpath1)) = 0
!DO GetHTTP
ELSE
MESSAGE('1) Ошибка: ' & H.Error,'Внимание !!!',ICON:Exclamation)
END
!---------------------------------------------------------------------------
Однако после PostData выдает ошибку "Ошибка считывания данных".
В чем может быть проблема ?
Нужно отправлять следующие запросы:
1.запрос на проверку:
https://mkassa.byro.ru/payment2/?CmdID= ... =102412582
2.получение ответа о проверке:
https://mkassa.byro.ru/payment2/?CmdID= ... =102412582
Делаю следующее:
!---------------------------------------------------------------------------
ConnectHTTP ROUTINE
DO Createfile
HTTPServer = 'mkassa.byro.ru'
HTTPPort = 80
IF H.Connect(HTTPServer,HTTPPort) = 0
DO PostHTTP
ELSE
MESSAGE('0) Ошибка: ' & H.Error,'Внимание !!!',ICON:Exclamation)
END
H.Disconnect()
!---------------------------------------------------------------------------
PostHTTP ROUTINE
IF H.PostData('payment2/?CmdID=NEW_COMMAND&FNAME=' & CLIP(Stringpath1),'POST\' & CLIP(Stringpath1)) = 0
!DO GetHTTP
ELSE
MESSAGE('1) Ошибка: ' & H.Error,'Внимание !!!',ICON:Exclamation)
END
!---------------------------------------------------------------------------
Однако после PostData выдает ошибку "Ошибка считывания данных".
В чем может быть проблема ?
Re: POST и GET запросы
'payment2/?CmdID=NEW_COMMAND&FNAME=' & CLIP(Stringpath1),'POST\' & CLIP(Stringpath1))
Здесь точно слэш перед вопросительным знаком? Я не вижу имени скрипта. Что-то должно быть такое
payment2/edit.php?cmdID=...
payment2/edit.asp?cmdID=...
payment2.cgi?cmdID=...
payment2.php?cmdID=...
На крайний случай payment2?cmdID=...
Здесь точно слэш перед вопросительным знаком? Я не вижу имени скрипта. Что-то должно быть такое
payment2/edit.php?cmdID=...
payment2/edit.asp?cmdID=...
payment2.cgi?cmdID=...
payment2.php?cmdID=...
На крайний случай payment2?cmdID=...
Re: POST и GET запросы
В описании протокола приведен пример:Yufil писал(а):'payment2/?CmdID=NEW_COMMAND&FNAME=' & CLIP(Stringpath1),'POST\' & CLIP(Stringpath1))
Здесь точно слэш перед вопросительным знаком? Я не вижу имени скрипта. Что-то должно быть такое
payment2/edit.php?cmdID=...
payment2/edit.asp?cmdID=...
payment2.cgi?cmdID=...
payment2.php?cmdID=...
На крайний случай payment2?cmdID=...
Примеры команд для проведения одного платежа:
1. запрос на проверку (в файле F2=1):
https://{URL}/?CmdID=NEW_COMMAND&FName=102412582
2. получение ответа о проверке:
https://{URL}/?CmdID=GET_ANSWER&FName=102412582
а в качестве URL - страница принимающая данные https://mkassa.byro.ru/payment2/
Re: POST и GET запросы
Мне не посчастливилось работать с https. А в форуме на googlegroups было письмо от I.Astapov velais@imec.msu.ru, который сделал модифицированный модуль.
Вот его сообщение
Вот его сообщение
Код: Выделить всё
Копать нужно с учетом трех моментов
1. Порт 443 и HTTPS вместо HTTP.
2. Добавить флаги обработки сертификатов
3. Обрабатывать ошибку 12045 (в коде некрасивый go to на нужное место), это для
просроченных, не зарегистрированных как надо сертификатов.
Рабочий код, эти 3 момента выделены звездочками:
i#=0;
hInternetSession = InternetOpen(cAgent, INTERNET_OPEN_TYPE_PRECONFIG, i#, i#, 0)
***
cService = 'HTTPS'
hConnect = InternetConnect(hInternetSession, cServer, 443, 0, 0,
INTERNET_SERVICE_HTTP, 0, 1)
IF hConnect
hRequest = HttpOpenRequest( hConnect, cPost, cURLString, 0, 0, 0,
INTERNET_FLAG_SECURE+INTERNET_FLAG_KEEP_CONNECTION+INTERNET_FLAG_IGNORE_CERT_DATE_INVALID+INTERNET_FLAG_IGNORE_CERT_CN_INVALID,
1)
***
IF hRequest
magain IF HttpSendRequest(hRequest,0,0, address(my:request), jj#)
RetValue = InternetReadFile(hRequest, ADDRESS(cBuffer), BufferLen,
dwBytesRead)
cresponse=sub(cbuffer,1,dwBytesRead)
RetValue = TRUE
ReadCount=dwbytesread
LOOP
RetValue = InternetReadFile(hRequest, ADDRESS(cBuffer), BufferLen,
dwBytesRead)
IF RetValue
ReadCount += dwBytesRead
if dwbytesread; cresponse=cresponse&sub(cbuffer,1,dwbytesread); .
IF MaxLen AND ReadCount > MaxLen
RetValue = FALSE
self.response='Слишком большие данные';
BREAK
.
.
WHILE RetValue AND dwBytesRead = BufferLen
if RetValue
self.response=cresponse .
ELSE
***
ii#=GetLasterror()
if ii#=12045
dwBuffLen = size(dwFlags);
kk#=address(dwflags)
x#=InternetQueryOption
(hrequest,INTERNET_OPTION_SECURITY_FLAGS,kk#,dwbufflen)
dwFlags = bor(dwFlags,SECURITY_FLAG_IGNORE_UNKNOWN_CA)
InternetSetOption
(hrequest,INTERNET_OPTION_SECURITY_FLAGS,address(dwflags),size(dwflags))
goto magain
else
stop ('error='&ii#)
.
***
.
i#=InternetCloseHandle(hRequest)
ELSE
MESSAGE('Can''t open request to server [' & cServer & '], URL [' & cURLString
& ']', 'URL2File', ICON:Exclamation)
.
i#=InternetCloseHandle(hConnect)
ELSE
MESSAGE('Can''t connect to server [' & cServer & ']', 'URL2File', ICON:Exclamation)
.
i#=InternetCloseHandle(hInternetSession)
dispose(cBuffer)
Re: POST и GET запросы
Кто-нибудь работал с библиотекой LIBCURL из CLARIONa ? Не поделитесь примером ?