Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2012, 21:54   #1
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
Вопрос Тупость idhttp.post (Прoблeмa.Есть рeшeниие?)

Здравствуйте. Возникла проблем. Делаю post запрос (IdHttp1.post)
Код:
 
page := IdHttp1.post('https://secure.site.org/site/API',data);
 
 if pos('!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!!',page )<>0 then
     begin
       Label1.Caption:='БЛА1';
     end
   else
    Label1.Caption:='БЛА2';
В ответ получаю "HTTP/1.1 403 Forbidden", НО!!!!
Ответ на мой post запрос (Смотрел в снифере)
Код HTML:
HTTP/1.1 403 Forbidden
Date: Tue, 27 Mar 2012 01:52:21 GMT
Server: Apache
Cache-Control: private
Set-Cookie: JServSessionIdr004=q1j2d0y1m4.app214a; path=/site/
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8
 
236
<?xml version="1.0" encoding="UTF-8"?>
<Response xsi:schemaLocation="http://site.com/crm/v1.0 http://service.site.net/xmlschema/crm.public.v1.xsd" xmlns="http://convio.com/crm/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <errors>
    <code>101</code>
    <message>!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!(Обычный текст)</message>
    <reason>FIELD_VALIDATION</reason>
    <pageError>!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!(Обычный текст)</pageError>
    <fieldError>!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!(Обычный текст)</fieldError>
  </errors>
</Response>
 
0
+Браузер получает 100% идентичный ответ (смотрел в снифере)

При вылете этого сообщения работа программы останавливается, естественно ни какого парсинга переменной page не происходит.
Прошу помощи в решении данной проблемы.
P.S В практическом программирование всего 4 дня)) Так что если будите что то описать, прошу делать это как можно подробнее )))
P.P.S Есть у кого нибудь кряк для Embarcadero® RAD Studio XE2 Version 16.0.4429.46931 ??
bakanaev вне форума Ответить с цитированием
Старый 27.03.2012, 22:56   #2
WestDragon
Пользователь
 
Регистрация: 10.04.2011
Сообщений: 15
По умолчанию

Предлагаю просто

Код:
try
page := IdHttp1.post('https://secure.site.org/site/API',data);
Except

end; 
 if pos('!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!!',page )<>0 then
     begin
       Label1.Caption:='БЛА1';
     end
   else
    Label1.Caption:='БЛА2';
WestDragon вне форума Ответить с цитированием
Старый 27.03.2012, 23:01   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Предлагаю просто
насколько я знаю присваивания не произойдет, ибо будет исключение.
надо посмотреть свойства Tidhttp.Response .
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.03.2012, 23:12   #4
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

У вас https, значит надо правильно инициализировать IOHandler свойство.
=master= вне форума Ответить с цитированием
Старый 27.03.2012, 23:16   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
У вас https, значит надо правильно инициализировать IOHandler свойство.
если бы оно было не инициализировано, была бы другая ошибка.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.03.2012, 11:27   #6
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Цитата:
Сообщение от WestDragon Посмотреть сообщение
Предлагаю просто
Попробовал, ошибка не вылетает но и в page ни чего не записывается ))Не подходит
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
надо посмотреть свойства Tidhttp.Response .
Не смог найти данное свойство, смотрел в Object Inspector (На обоих вкладках,Properties и Events ) но там нет такого. Помучил гугл, но кроме голого кода не чиго не нашел, прочел (не все, местами )
"Глубины Indy" Перевод: А.П. Подгорецкий. Было там про Response но только не для Tidhttp. Вопрос где его (Tidhttp.Response) искать ? И как им пользоваться ?

Цитата:
Сообщение от =master= Посмотреть сообщение
У вас https, значит надо правильно инициализировать IOHandler свойство.
По поводу того что у меня что не так настроено отвечу, настроено у меня все 99% правильно, до этого уже успел написать пару удачных программ в этом же направление. Проблема не в моих недочетах, проблема в самом Tidhttp, так как когда приходит ответ на post запрос вида
Код HTML:
HTTP/1.1 403 Forbidden
Date: Tue, 27 Mar 2012 01:52:21 GMT
Server: Apache
Cache-Control: private
Set-Cookie: JServSessionIdr004=q1j2d0y1m4.app214a; path=/site/
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8
 
236
<?xml version="1.0" encoding="UTF-8"?>
<Response xsi:schemaLocation="http://site.com/crm/v1.0 http://service.site.net/xmlschema/crm.public.v1.xsd" xmlns="http://convio.com/crm/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <errors>
    <code>101</code>
    <message>!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!(Обычный текст)</message>
    <reason>FIELD_VALIDATION</reason>
    <pageError>!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!(Обычный текст)</pageError>
    <fieldError>!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!(Обычный текст)</fieldError>
  </errors>
</Response>
он автоматом выбивает мне сообщение "HTTP/1.1 403 Forbidden", но суть то в том что такой ответ и должен приходить, и браузеру 100% идентичный ответ приходит, но браузер не выдает сообщение "HTTP/1.1 403 Forbidden" а выдает (на экране монитора)

Строка 1 (была еще до нажатия кнопки)
Строка 3 (была еще до нажатия кнопки)
Строка 2 (была еще до нажатия кнопки)
!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!! (<message>!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!(Обычный текст)</message>)
!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!! ( <pageError>!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!(Обычный текст)</pageError>)
!!!!!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!(<fieldError>!!! !!!!!!!!!!Тут то что мне надо!!!!!!!!!!!!!!!(Обычный текст)</fieldError>)

Вопрос как мне сделать что бы не вылетала ошибка (так как все правильно) и ответ записывал в переменную page?
bakanaev вне форума Ответить с цитированием
Старый 28.03.2012, 11:44   #7
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Потому что браузер правильно отвечает на вопросы связанные с ssl.
Вам же надо использовать TIdSSLIOHandlerSocket либо TIdSSLIOHandlerSocketOpenSSL.
=master= вне форума Ответить с цитированием
Старый 28.03.2012, 12:05   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

=master=, перечитайте мое сообщение насчет вашего SSL.

ТС, Response это паблик свойство(а не опубликованное), и доступно только в ран-тайме.
то есть кодом.
Код:
idhttp.Response.<something>
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.03.2012, 13:55   #9
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Цитата:
Сообщение от =master= Посмотреть сообщение
Потому что браузер правильно отвечает на вопросы связанные с ssl.
Вам же надо использовать TIdSSLIOHandlerSocket либо TIdSSLIOHandlerSocketOpenSSL.
Я использую TIdSSLIOHandlerSocketOpenSSL)))!!!!
Вы не можете понять что так и должно быть.
Объясняю
Я захожу на сайт, перехожу на нужную страницу, ввожу некоторые данные, нажимаю кнопка "Применить" и если что введено не правильно то возвращается вот такой ответ (снифер, браузер)
Код HTML:
HTTP/1.1 403 Forbidden
Date: Wed, 28 Mar 2012 09:30:48 GMT
Server: Apache
Cache-Control: private
Keep-Alive: timeout=8, max=496
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8

2f8
<?xml version="1.0" encoding="UTF-8"?>
<Response xsi:schemaLocation="http://site.com/crm/v1.0 http://service.site.net/xmlschema/crm.public.v1.xsd" xmlns="http://convio.com/crm/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <errors>
    <code>101</code>
    <message>Error: There was a problem with  your processing.</message>
    <reason>DECLINED</reason>
    <declineReason>DECLINE</declineReason>
    <declineDetail>Declined</declineDetail>
    <declineUserMessage>Your options was declined. Please check the information that you entered.</declineUserMessage>
    <pageError>Your options was declined. Please check the information that you entered.</pageError>
  </errors>
</Response>

0
И вот что выдает для моей программы
Код HTML:
HTTP/1.1 403 Forbidden
Date: Wed, 28 Mar 2012 09:36:46 GMT
Server: Apache
Cache-Control: private
Set-Cookie: JServSessionIdr004=vvw90pmon1.app202b; path=/site/
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8

2f8
<?xml version="1.0" encoding="UTF-8"?>
<donationResponse xsi:schemaLocation="http://convio.com/crm/v1.0 http://service.convio.net/xmlschema/crm.public.v1.xsd" xmlns="http://convio.com/crm/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <?xml version="1.0" encoding="UTF-8"?>
<Response xsi:schemaLocation="http://site.com/crm/v1.0 http://service.site.net/xmlschema/crm.public.v1.xsd" xmlns="http://convio.com/crm/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <errors>
    <code>101</code>
    <message>Error: There was a problem with  your processing.</message>
    <reason>DECLINED</reason>
    <declineReason>DECLINE</declineReason>
    <declineDetail>Declined</declineDetail>
    <declineUserMessage>Your options was declined. Please check the information that you entered.</declineUserMessage>
    <pageError>Your options was declined. Please check the information that you entered.</pageError>
  </errors>

0
Я знаю что если я введу правильные данные то моя программа сработает корректно, не вылетит ошибка и ответ запишется в переменную page. Этого мало, так как мне нужно парсить и ответы с ошибкой))


Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение

ТС, Response это паблик свойство(а не опубликованное), и доступно только в ран-тайме.
то есть кодом.
Код:
idhttp.Response.<something>
Можно ссылку на описание данного свойства, как его использовать и т.д
bakanaev вне форума Ответить с цитированием
Старый 28.03.2012, 14:44   #10
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Я тут подумал и решил сделать как советовал WestDragon,
Код:
try
 page := IdHttp1.post('https://secure.site.org/site/API',data);
   if pos('THANK YOU!',page )<>0 then
     begin
       Label1.Caption:='Подключился';
     end
     else
     Label1.Caption:='Все, я умер';
Except
  on Exception do Label1.Caption:='Не подключился';


end;
Но это называется через "жопу", так как мне надо все таки парсить результат при ошибки!!! Вопрос остается открытым!!!

Если не чиго не придумаем то буду использовать этот вариант
bakanaev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
idHTTP, POST _ZixeL_ Общие вопросы Delphi 7 12.03.2013 16:19
Проблема с idhttp.post zarethernet Работа с сетью в Delphi 0 02.02.2012 14:13
idhttp post roulis2844sasha Работа с сетью в Delphi 2 26.07.2011 10:15
idHTTP post nix01d Работа с сетью в Delphi 7 06.07.2010 23:52
POST idHTTP Pasha_Sh Работа с сетью в Delphi 7 11.06.2010 09:00