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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2008, 11:40   #1
nigma143
 
Регистрация: 30.06.2007
Сообщений: 4
По умолчанию HTTPS,SSL <-----Помогите разобраться

Воть....
procedure TForm1.Button1Click(Sender: TObject);
var
data: TIdMultiPartFormDataStream;
red: TIdMultiPartFormDataStream;

begin
data := TIdMultiPartFormDataStream.Create;
red := TIdMultiPartFormDataStream.Create;

try

data.AddFormField('request', req_type);
data.AddFormField('id=', req_id );
data.AddFormField('checkid=',req_ch eckid);
data.AddFormField('product=',req_pr oduct );
data.AddFormField('value=', req_value);
data.AddFormField('account', req_account );
data.AddFormField('timeout=', req_timeout);
data.AddFormField('cnfmode=', req_cnfmode );
red.AddFormField('X-Eport-Auth','point='+point+';'+'card='+ca rd+';'+'pin='+pin);
red.AddFormField('X-Eport-Mode', '1' );
red.AddFormField('Content-Type','text/plain; charset=koi8-r');
IdHTTP1.IOHandler:=IdSSLIOHandlerSo cket1;
IdSSLIOHandlerSocket1.SocksInfo:=Id http1.Socket.SocksInfo;

{ Call the Post method of TIdHTTP and read the result into TMemo }
Memo1.Lines.Text := IdHTTP1.POST('https://dealer.e-port.ru/cp/fe',red+data);
finally
data.Free;
end;

end;

Выдаёт Error connecting with SSL
================

Короче вот код на Перле -->
Мне надо его перевести в Delphi
помогите срочно надо!!!!
use strict;
use Net::SSLeay qw(post_https make_headers);

##### параметры подключения #####

# номер точки e-port
my $point = 123;
# номер карты e-port
my $card = "249000-00000";
# пин-код карты e-port
my $pin = "1234567890";

##### исходные данные запроса операции #####

# тип запроса (OPERATION/CONFIRM/CANCEL)
my $req_type = "OPERATION";
# идентификатор операции
my $req_id = "12345";
# номер чека
my $req_checkid = "12345";
# артикул товара из справочника(в данном случае - МТС ESPP)
my $req_product = 4420;
# объем сделки (в данном случае - 100 рублей)
my $req_value = "100.00RUR";
# реквизиты л/с клиента, объединенные точкой с запятой
# в данном случае ракуизит один - номер телефона
my $req_account = "9161234567";
# тайм-аут запроса в синхронном режиме
my $req_timeout = 15;
# режим транзакции (0 - однофазный, 1 - двухфазный)
my $req_cnfmode = 1;


##### Формирование запроса text/plain#####
my $CRLF = "\r\n";
my $request = $req_type . $CRLF .
"id=" . $req_id . $CRLF .
"checkid=" . $req_checkid . $CRLF .
"product=" . $req_product . $CRLF .
"value=" . $req_value . $CRLF .
"account=" . $req_account . $CRLF .
"timeout=" . $req_timeout . $CRLF .
"cnfmode=" . $req_cnfmode . $CRLF;

print "=== Operation Request ===\n";
print $request;

##### формируем http-заголовки запроса #####
my $reqHeaders;
# добавляем заголовок аутентификации
$reqHeaders .= make_headers("X-Eport-Auth"=>"point=$point; card=$card; pin=$pin");
# добавляем признак синхронного режима
$reqHeaders .= make_headers("X-Eport-Mode"=>"1");
# указываем кодировку сообщения и формат данных
$reqHeaders .= make_headers("Content-Type"=>"text/plain; charset=koi8-r");

##### обмениваемся данными с сервером #####
my $host = "dealer.e-port.ru";
my $port = "443";
my $uri = "/cp/fe";
my ($body, $status, %resHeaders) = post_https($host,$port,$uri,$reqHea ders,$request);

# http-код ответа указывает на ошибку
if($status ne 'HTTP/1.1 200 OK'){
print "HTTP ERROR: $status\n";
print "$body\n";

# http-код ответа 200 (успешно)
}else{
# разбираем построчно
my @lines = split(/\r\n/, $body);
my $i = 0;

# ответ по операции должен начинаться с ключевого слова "RESULT"
die "Response: Bad format, RESULT required\n" unless $lines[$i++] eq 'RESULT';

# затем следуют обязательные параметры ответа в определенном порядке

# идентификатор операции
die "Response: Bad format, id required\n" unless $lines[$i++] =~ /^id=(.*)$/;
my $res_id = $1;

# код ответа
die "Response: Bad format, code required\n" unless $lines[$i++] =~ /^code=(.*)$/;
my $res_code = $1;

# сообщение для разработчика/оператора системы
die "Response: Bad format, omsg required\n" unless $lines[$i++] =~ /^omsg=(.*)$/;
my $res_omsg = $1;

# сообщение для клиента
die "Response: Bad format, cmsg required\n" unless $lines[$i++] =~ /^cmsg=(.*)$/;
my $res_cmsg = $1;

# далее следуют необязательные параметры операции
my ($res_time, $res_pmsg, $res_card, $res_pin);

while( my $line = $lines[$i++]){
# дата/время операции на сервере
if($line=~ /^time=(.*)$/){
$res_time = $1
# сообщение для печати
}elsif($line=~ /^pmsg=(.*)$/){
$res_pmsg = $1
# номер карты e-port клиента
}elsif($line=~ /^card=(.*)$/){
$res_card = $1
# пин-код карты e-port клиента
}elsif($line=~ /^pin=(.*)$/){
$res_pin = $1
}else{
die "Response: Bad format\n";
}
}

# обрабатываем полученные данные
print "=== Operation result ===\n";
print "id :" . $res_id . "\n";
print "code :" . $res_code . "\n";
print "omsg :" . $res_omsg . "\n";
print "cmsg :" . $res_cmsg . "\n";
print "time :" . $res_time . "\n";
print "pmsg :" . $res_pmsg . "\n";
print "card :" . $res_card . "\n";
print "pin :" . $res_pin . "\n";
}
nigma143 вне форума Ответить с цитированием
Старый 14.03.2008, 11:42   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Библиотеки не те стоят
Тип ssl не правильно выставлен.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 14.03.2008, 11:43   #3
nigma143
 
Регистрация: 30.06.2007
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Библиотеки не те стоят
Тип ssl не правильно выставлен.
ну прасвети меня гуру как надо это делать
nigma143 вне форума Ответить с цитированием
Старый 14.03.2008, 11:53   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Поиск вас недостоин?
http://www.programmersforum.ru/showthread.php?t=14571
http://www.programmersforum.ru/showthread.php?t=15070
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 14.03.2008, 12:05   #5
nigma143
 
Регистрация: 30.06.2007
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Я искал всезде но нормального ответа ненашёл
Объясни пожалуиста как это!Напиши иходник неольшой пжалуста
nigma143 вне форума Ответить с цитированием
Старый 04.06.2008, 08:29   #6
LordAlex
 
Аватар для LordAlex
 
Регистрация: 30.05.2008
Сообщений: 6
Печаль Подобная проблема...

имеется (delphi6+indy9+библиотеки скачанные с http://www.programmersforum.ru/showthread.php?t=14571):
Код:
var
  data: TStringList;
begin
  data := TStringList.Create;
  data.Add('OPERATION');
  data.Add('id=1');
  data.Add('checkid=1');
  data.Add('product=4420');
  data.Add('value=20.0000RUR');
  data.Add('account=913000000');

 IdHTTP1.Request.ContentLength := length(data.Text);
 IdHTTP1.Request.CustomHeaders.Add('Content-Type: multipart/mixed; charset=windows-1251');
 IdHTTP1.Request.CustomHeaders.Add('X-Eport-Auth: point=222222; card="229000-00000"; pin="1234567890"');
 IdHTTP1.Request.CustomHeaders.Add('');

 request.Lines.Text:=IdHTTP1.Post('https://dealer-m1.fe.e-port.ru/cp/fe',data);
 Data.Free;
Код:
  object IdHTTP1: TIdHTTP
    ASCIIFilter = True
    IOHandler = IdSSLIOHandlerSocket1
    MaxLineAction = maException
    Port = 443
    AllowCookies = True
    ProxyParams.BasicAuthentication = False
    ProxyParams.ProxyPort = 0
    Request.ContentLength = -1
    Request.ContentRangeEnd = 0
    Request.ContentRangeStart = 0
    Request.Accept = 'text/html, */*'
    Request.BasicAuthentication = False
    Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
    HTTPOptions = [hoForceEncodeParams]
    Left = 16
    Top = 552
  end
  object IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocket
    SSLOptions.RootCertFile = 'D:\sert\eport.cer'
    SSLOptions.CertFile = 'D:\sert\eport.cer'
    SSLOptions.Method = sslvSSLv3
    SSLOptions.Mode = sslmUnassigned
    SSLOptions.VerifyMode = []
    SSLOptions.VerifyDepth = 0
    Left = 56
    Top = 552
  end
в модуле IdHTTP на строке ARequest.Authentication := Auth.Create; выходит ошибка
Access violation at address 00471AA9 in module 'ePort.exe'. Read of address 00000020.

если использую
Код:
 SSLOptions.Method = sslvSSLv2
получаю ошибку
Error connecting with SSL.

кстати: приведенная выше реализация с red+data; даже не компилицца и ругается
"[Error] main.pas(84): Incompatible types"

помогите с реализацией или советом
Если туп как дерево, родишся баобабом... (с)
LordAlex вне форума Ответить с цитированием
Старый 04.06.2008, 09:40   #7
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

а Indy у вас какой версии ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 04.06.2008, 09:53   #8
LordAlex
 
Аватар для LordAlex
 
Регистрация: 30.05.2008
Сообщений: 6
По умолчанию

имеется (delphi6+indy9

Использовать другие версии проблематично - много проектов на 9 написано
Если туп как дерево, родишся баобабом... (с)
LordAlex вне форума Ответить с цитированием
Старый 04.06.2008, 10:02   #9
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

для начала посоветую следующее:
поставить любой монитор http заголовков и посомтреть какая версия SSL используется.
2.е немного понял назначения в вашем случае локального сертификата
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 04.06.2008, 10:40   #10
LordAlex
 
Аватар для LordAlex
 
Регистрация: 30.05.2008
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
любой монитор http заголовков
посоветуйте что-нить...
сниффер вообще не видит что что-то ходит (наверно до отправки дело не доходит)
Если туп как дерево, родишся баобабом... (с)
LordAlex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация на https arm82 Работа с сетью в Delphi 15 23.01.2011 20:54
Не могу авторизоваться на HTTPS Yuran Работа с сетью в Delphi 11 18.04.2008 14:19
idHTTP и HTTPS CoDeR Работа с сетью в Delphi 2 12.11.2007 15:55
HTTPS и POST Alex_C Работа с сетью в Delphi 4 25.10.2007 21:04
Ищу информацию по перехвату и декодированию HTTPS траффика ir0407 Работа с сетью в Delphi 12 22.07.2007 08:49