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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2011, 22:54   #1
silent_lab
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 36
Вопрос не работает POST IdHTTP



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

Код:
procedure TForm1.Button1Click(Sender: TObject);
var params,responseres:tstringlist;
Response: TStringStream;
begin
  params:=TStringList.Create;
  responseres:=TStringList.Create;

  try
    params.Add('p_ser=4308');
    params.Add('p_num=112324');
    responseres.Text:=IdHTTP1.Post('http://www.kubanoms.ru/Polis/index.php',params);
    if Pos('действителен',responseres.Text)>0 then
         Memo1.Text := responseres.Text
    else ShowMessage('не действителен');
    Memo1.Text := responseres.Text;
  finally
   params.free;
responseres.free;
  end;
end;
должен вернуть что полис действителен он этого не происходит, незнаю что делать ?
silent_lab вне форума Ответить с цитированием
Старый 15.12.2011, 11:16   #2
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

Цитата:
незнаю что делать
ну, для начала включить мозги.

По статье на этом форуме (Общие принципы авторизации на удаленных сайтах.) зарбирались как данные отправлять? Поздравляю , по этой статье грабли долго будете собирать
Код:
birth=
btn_search=ПОИСК
names=
p_num=112324
p_ser=4308
search_type=1
secname=
surname=
это список параметров, которые отправляются, как миниум один из них (search_type) очень важен. Так что фтыкай, что именно надо слать
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно
Mifody вне форума Ответить с цитированием
Старый 15.12.2011, 11:54   #3
silent_lab
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 36
По умолчанию

я добился что запрос якобы отсылает но все равно не получаю правильного ответа.
Дело в том что нужно сделать такой же выбор как и на сайте, либо поиск по одному либо по другому.
Вот так делаю поиск по поиск по серии и номеру

Код:
procedure TForm1.Button1Click(Sender: TObject);
var params,responseres:tstringlist;
Response: TStringStream;
begin
  params:=TStringList.Create;
  responseres:=TStringList.Create;

  try

    params.Add('p_ser=4308');
    params.Add('p_num=112324');
    params.Add('btn_search=submit');
    responseres.Text:=IdHTTP1.Post('http://www.kubanoms.ru/Polis/index.php',params);
    if Pos('действителен',responseres.Text)>0 then
         Memo1.Text := responseres.Text
    else ShowMessage('не действителен');
    Memo1.Text := responseres.Text;
  finally
   params.free;
responseres.free;
  end;
end;
но он мне выдает что ничего не найдено хотя данные действительные.

Мне кажеться , что он всеравно видит остальные INPUT и использует их,
потому как их скрывают через style -
Код:
<input type="text" name="surname" class="input" value="" style="visibility: hidden; "/>
и как мне перключить использовать поиск по поиск по ФИО, по умолчанию стоит - поиск по серии и номеру и переключается через javascriвот

код страницы :

Код:
<html debug="true">
<head>
<script src="chrome-extension://bmagokdooijbeehmkpknfglimnifench/googleChrome.js"/>
<body onload="javascript: showHideElem('1')">
<form name="logFrm" method="post" action="/Polis/index.php">
<div align="right">
<table>
<tbody>
<tr>
<td align="center" style="">СМО</td>
</tr>
<tr class="d-green">
<td>
<input class="input_p" type="text" name="log" onclick="javascript: clInL();" onblur="javascript: clOuL();"/>
</td>
</tr>
<tr class="d-green">
<td>
<input class="input_p" type="password" name="psw" onclick="javascript: clInP();" onblur="javascript: clOuP();"/>
</td>
</tr>
<tr>
<td align="center">
<input class="btn_p" type="submit" value="Войти" name="btn_in"/>
</td>
</tr>
<tr class="e-red">
<td align="center"/>
</tr>
</tbody>
</table>
</div>
</form>
<div align="center">
<form name="FPoisk" method="post" action="/Polis/index.php" onsubmit="return checkForm(this);">
<table width="100%" cellspacing="1" cellpadding="5" border="0" bgcolor="#FFFFFF">
<tbody>
<tr>
<tr>
<td valign="top">
<table width="100%" cellspacing="1" cellpadding="5" border="0" bgcolor="#FFFFFF">
<tbody>
<tr>
<td class="d-green">
<td class="d-green">
</tr>
<tr>
<td width="50%" valign="top">
<table width="100%" cellspacing="1" cellpadding="5" border="0" bgcolor="#FFFFFF">
<tbody>
<tr>
<td width="20%" nowrap="" class="l-green">
<td class="l-green">
<input type="text" name="p_ser" class="input" value="" style="visibility: visible; "/>
</td>
</tr>
<tr>
<td width="20%" nowrap="" class="l-green">
<b>Номер полиса *</b>
</td>
<td class="l-green">
<input type="text" name="p_num" class="input" maxlength="21" value="" style="visibility: visible; "/>
</td>
</tr>
</tbody>
</table>
</td>
<td width="50%" valign="top">
<table width="100%" cellspacing="1" cellpadding="5" border="0" bgcolor="#FFFFFF">
<tbody>
<tr>
<td width="20%" nowrap="" class="l-green">
<b>Фамилия</b>
</td>
<td class="l-green">
<input type="text" name="surname" class="input" value="" style="visibility: hidden; "/>
</td>
</tr>
<tr>
<td width="20%" class="l-green" nowrap="">
<b>Имя</b>
</td>
<td class="l-green">
</tr>
<tr>
<td width="20%" class="l-green" nowrap="">
<b>Отчество</b>
</td>
<td class="l-green">
<input type="text" name="secname" class="input" value="" style="visibility: hidden; "/>
<br/>
<span class="rem">можно не указывать</span>
</td>
</tr>
<tr>
<td width="20%" class="l-green" nowrap="">
<b>Дата рождения</b>
</td>
<td class="l-green">
<input type="text" name="birth" class="input" value="" style="visibility: hidden; "/>
<br/>
<span class="rem">в формате ДД.ММ.ГГГГ, например, 01.01.2005</span>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td colspan="2" align="center" class="d-green">
<input type="button" class="btn" value="ОЧИСТИТЬ" onclick="javascript: ClearForm();"/>
<input type="submit" name="btn_search" value="ПОИСК" class="btn"/>
</td>
</tr>
<tr>
<td align="left">
*
<br/>
- для временного свидетельства указывается 013ХХХХХХ
<br/>
- для полиса ОМС единого образца указывается ЕНП ХХХХХХХХХХХХХХХХ
<br/>
где Х число от 0 до 9
<br/>
для отображения статуса изготовления полиса единого образца поиск производится по ФИО
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</form>
<div id="mixpanel" style="visibility: hidden; "/>
</body>
</html>
silent_lab вне форума Ответить с цитированием
Старый 15.12.2011, 12:07   #4
silent_lab
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 36
По умолчанию

Mifody

как оказалось и правда search_type=1 действительно влият и очень сильно.

Можете подсказать статьи где мона почитать по работе, потому как и правда тут этого не описано !!


да еще если search_type=2 то выдает результат в memo1 в непонятной кодировке, и также результат не верный !! как исправить ? перекодировать данные отправляемые через POST ?

Код:
<tr><td width=20% nowrap class="l-green"><b>Фамилия</b></td><td class="l-green"><input type=text name="surname" class="input" value="Грецеий"></td></tr>
<tr><td width=20% class="l-green" nowrap><b>Имя</b></td><td class="l-green"><input type=text name="names" class="input" value="Михаил"></td></tr>
<tr><td width=20% class="l-green" nowrap><b>Отчество</b></td><td class="l-green"><input type=text name="secname" class="input" value=""><br><span class="rem">можно не указывать</span></td></tr>
<tr><td width=20% class="l-green" nowrap><b>Дата рождения</b></td><td class="l-green"><input type=text name="birth" class="input" value="09.10.1978"><br><span class="rem">в формате ДД.ММ.ГГГГ, например, 01.01.2005</span></td></tr>
</table>
</td>

Последний раз редактировалось silent_lab; 15.12.2011 в 12:44.
silent_lab вне форума Ответить с цитированием
Старый 15.12.2011, 13:16   #5
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

логически поразмыслив
search_type=1 - поиск по номеру/серии
search_type=2 - поиск по ФИО

Цитата:
результат в memo1 в непонятной кодировке
так кодировк сайта небось UTF8
1. попробовать UTF8ToAnsi
2. повтыкать как преобразовать кодировку
что на этом форуме, что на других - обсуждалось не раз

З.Ы. Помог - тыркни в весы, тебе не сложно, а мне приятно :P
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно
Mifody вне форума Ответить с цитированием
Старый 15.12.2011, 13:44   #6
silent_lab
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 36
По умолчанию

Mifody
Смотрел снифером , что отправляет программа или браузером, так вот отправляют одно и тоже но , поиск по ФиО , так и не работает...

По серии и номеру ищет , а по 2 му варианту нет, в проге не находит а в браузером находит.

Код :


Код:
procedure TForm1.Button1Click(Sender: TObject);
var params,responseres:tstringlist;
Response: TStringStream;
search_type: string;
begin
  params:=TStringList.Create;
  responseres:=TStringList.Create;

  try


  if RadioButton1.Checked then
    begin
        search_type := '1';
        params.Add('search_type='+search_type);
        params.Add('p_ser=4308');
        params.Add('p_num=112324');
        params.Add('btn_search=ПОИСК');
          responseres.Text:=IdHTTP1.Post('http://www.kubanoms.ru/Polis/index.php',params);
        if Pos('действителен',responseres.Text)>0 then
         Memo1.Text := responseres.Text
         else ShowMessage('не действителен');
        Memo1.Text := responseres.Text;
    end
      else
          begin
            search_type := '2';
              params.Add('search_type='+search_type);
              params.Add('p_ser=');
              params.Add('p_num=');
             params.Add('surname=Грецкий');
             params.Add('names=Михаил');
             params.Add('secname=');
             params.Add('birth=09.10.1978');
             params.Add('btn_search=ПОИСК');
                 responseres.Text:=IdHTTP1.Post('http://www.kubanoms.ru/Polis/index.php',params);
                 if Pos('действителен',responseres.Text)>0 then
                   Memo1.Text := responseres.Text
                 else ShowMessage('не действителен');
                  Memo1.Text := responseres.Text;
          end;

  finally
    params.free;
    responseres.free;
  end;
end;
почему может так быть ?
silent_lab вне форума Ответить с цитированием
Старый 15.12.2011, 14:25   #7
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

имя/фанилия как именно уходят? Грецкий/Михаил ? если так, то скорее всего не верно. Сейчас правда проверить не могу, другая система запущена
наверняка надо конвертнуть в UTF + Encode сделать. Кстати, тож самое желательно и для "ПОИСК" сделать.

Encode - какая именно функция в индейцах точно не скажу, сам пользую синапс. Суть, преобразовать русский текст в набор троек %DD
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно
Mifody вне форума Ответить с цитированием
Старый 15.12.2011, 14:32   #8
silent_lab
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 36
По умолчанию

Проблема как оказалось в среде XE2.
На Delphi 7 все работает норм ..... Просто вспомнил про проблемы в XE2 c данным вопросом.
Теперь интересно как их решить потому как купили именно XE2 ????
silent_lab вне форума Ответить с цитированием
Старый 15.12.2011, 15:20   #9
Mifody
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 215
По умолчанию

хм, насчет XE2 ничего путного посоветовать не могу , не пользую ее, могу только порекомендовать:
1. попробуй использовать тип AnsiString (или как он там у них, по умолчанию, насколько я знаю XE2 пользует Юникод)
2. разобраться с Юникодом - тут в принципе ничего не могу сказать
3. сходи к Владу в гости webdelphi.ru (эх, блин, рекламирую я его, хотя у него куча статей моей тематики) - он у себя минифорум открыл, для "страждущих". Чел нормальный, старается объяснить .
Помог с вопросом - тыркаем в весы, Вам не сложно, а мне приятно
Mifody вне форума Ответить с цитированием
Старый 17.12.2011, 21:38   #10
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Попробуйте сделать следующиее:
В uses подключить модуль IdURI

В код проекта добавьте функцию
Код:
function URLEncode(const Str: string): string;
begin
  with TIdURI.Create do
  try
    Result := ParamsEncode(Str, TEncoding.ANSI);
  finally
    Free;
  end;
end;
Перед отправкой POST запроса добавьте
Код:
IdHTTP1.HTTPOptions := [];
и все значения, содержащие кириллицу "пропустите" через функцию URLEncode

Пример:
Код:
uses
  ..., IdURI;


...

function URLEncode(const Str: string): string;
begin
  with TIdURI.Create do
  try
    Result := ParamsEncode(Str, TEncoding.ANSI);
  finally
    Free;
  end;
end;
...

params.Add('names=' + URLEncode('Михаил'));
Должно помочь
kangreon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
idhttp post roulis2844sasha Работа с сетью в Delphi 2 26.07.2011 10:15
Проблемы с IdHTTP.Post() ! $T@LKER Работа с сетью в Delphi 30 03.09.2010 17:03
idHTTP post nix01d Работа с сетью в Delphi 7 06.07.2010 23:52
POST idHTTP Pasha_Sh Работа с сетью в Delphi 7 11.06.2010 09:00
idHTTP GET и POST запросы FAiver Работа с сетью в Delphi 64 15.05.2008 13:22