2014-06-30 6 views
1

:이 코드와 인디 사용하여 HTTP 세션을 만들려고하고

var 
    idHttp1 : TidHttp; 
    lIOHandler: TIdSSLIOHandlerSocketOpenSSL; 
    idCookie : TIdCookieManager; 
    Initalized : boolean; 

procedure InitSession; 
begin 
    Initalized := True; 
    try 
    idHttp1 := TIdHTTP.Create(nil); //the variables are declared globally 
    lIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); 
    idCookie := TIdCookieManager.Create(nil); 

    idHttp1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0)'; 
    idHttp1.Request.Referer := 'https://www.parts.bmwgroup.com/'; 
    idHttp1.Request.AcceptLanguage := 'de'; 
    idHttp1.ConnectTimeout := 10000; 
    idHttp1.ReadTimeout := 10000; 
    idHttp1.Response.KeepAlive := true; 
    idHttp1.IOHandler := lIOHandler; 

    idHttp1.HandleRedirects := true; 
    idHttp1.CookieManager := idCookie; 
    idHttp1.AllowCookies := true; 

    ShowMessage(IntToStr(idCookie.CookieCollection.Count)); 
    except 
    Initalized := False; 
    end; 
end; 

그런 다음 내가 웹 사이트에 로그인하는 데 사용되는 새로운 세션 ID를 만들려면이 뭐하는 거지를 :

begin 
    ... 
    s := IdHTTP1.Get('https://www.parts.bmwgroup.com/tetis/startTetisAction.do?LOGON_USERID=XXXXXXXX&LOGON_PASSWD=XXXXXXXX'); 
end 

그리고 지금을 난에서 작업 할 때 : 나는 웹 사이트에서 세션을 얻을 때

begin 
    ... 
    s := IdHTTP1.Get('https://www.parts.bmwgroup.com/tetis/index.jsp?DOMAIN=Internet'); 
end 

, 내가 로그인 시도 tern content 다음과 같은 HTTP 메시지가 나타납니다.

<html> 
<head> 



<script language="JavaScript"> 
function zeigeLogin() 
{ 


     open ("/tetis/startTetisAction.do","TeTIS"); 

} 
</script> 
<title>Aftersales Assistance Portal ASAP</title> 
<link rel="STYLESHEET" type="text/css" href="/tetis/css/content.css"> 
</head> 

<body link="#003399" vlink="#666666" alink="#003399"> 
    <table border="0" cellspacing="0" cellpadding="0"> 
<tr> 
    <td class="hl1">Aftersales Assistance Portal ASAP</td> 
</tr> 
<tr> 
    <td class="hl2">Ihre Session ist ungultig.<BR>Bitte melden Sie sich neu an.<BR> 
    <BR> 
    <a href="javascript:zeigeLogin()" class="h12red9">&gt; Login</a></td> 
    </td> 
</tr> 
</table> 
</body> 
</html> 

왜 내 세션이 작동하지 않습니까?

답변

0

제대로 로그인하지 않았습니다.

웹 브라우저에서 https://www.parts.bmwgroup.com/tetis/index.jsp?DOMAIN=Internet을 방문하면 HTML 로그인 양식이있는 팝업 창이 표시됩니다. 그런 다음 해당 로그인 양식을 POST 요청을 사용하여 서버에 제출하지만 대신 GET 요청을 사용하여 로그인 자격 증명을 보내야합니다.

나를 위해 다음 작품

나는 그것을하려고하면

var 
    idHttp1 : TIdHTTP = nil; 
    Initialized : Boolean = False; 

procedure InitSession; 
begin 
    try 
    idHttp1 := TIdHTTP.Create(nil); 
    idHttp1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdHttp1); 
    idHttp1.CookieManager := TIdCookieManager.Create(IdHttp1); 

    idHttp1.ConnectTimeout := 10000; 
    idHttp1.ReadTimeout := 10000; 
    idHttp1.HandleRedirects := true; 
    idHttp1.AllowCookies := true; 

    idHttp1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0)'; 
    idHttp1.Request.AcceptLanguage := 'de'; 
    idHttp1.Request.Connection := 'Keep-Alive'; 

    Initialized := True; 
    except 
    Initialized := False; 
    end; 
end; 

begin 
    ... 
    idHttp1.Request.Referer := 'https://www.parts.bmwgroup.com/'; 
    s := IdHTTP1.Get('https://www.parts.bmwgroup.com/tetis/index.jsp?DOMAIN=Internet'); 
end 

begin 
    ... 
    idHttp1.Request.Referer := 'https://www.parts.bmwgroup.com/tetis/index.jsp?DOMAIN=Internet'; 
    s := IdHTTP1.Get('https://www.parts.bmwgroup.com/tetis/startTetisAction.do?DOMAIN=Internet'); 
end 

var 
    PostParams: TStringList; 
begin 
    ... 
    PostParams := TStringList.Create; 
    try 
    PostParams.Add('LOGON_USERID=XXXXXXXX'); 
    PostParams.Add('LOGON_PASSWD=XXXXXXXX'); 

    IdHttp1.Request.Referer := 'https://www.parts.bmwgroup.com/tetis/startTetisAction.do?DOMAIN=Internet'; 
    s := IdHTTP1.Post('https://www.parts.bmwgroup.com/tetis/startTetisAction.do', PostParams); 
    finally 
    PostParams.Free; 
    end; 
end 
+0

당신의 코드를하려고하지만, POST 요청을 보낸다. IE11로 로그인 할 때 요청 만 받는다. http://i.stack.imgur.com/bfSSk.jpg http://i.stack.imgur.com/JfIVA.jpg 및 코드에서 당신은 IdHTTP1.POST 의미 : 은 이쪽을 봐주세요 왜냐하면 IdHTTP1.Get은 오류 메시지를 표시하기 때문입니다. – user3791601

+0

사용자 이름으로 로그인을 시도 할 수 있습니다. eu444444 비밀번호 : minietk1 – user3791601

+0

내 답변을 게시하기 전에 먼저 시도했습니다 (존재하지 않는 자격 증명을 사용하여 요청을 볼 수 있음). 앞서 말한 것은 IE11이 실제로하는 것을 본 것입니다. 세션 URL을 방문하면 'GET'대신 'POST'를 사용하여 제출되는 로그인 양식이있는 팝업 창이 열립니다. 이것이 내가 여러분에게 준 코드입니다. 내가 준 코드를 해봤습니까? 어떤 성공을 했습니까? 아니면 여전히 오류가 있습니까? –