none
Login über HttpWebRequest RRS feed

  • Frage

  • Hallo liebes Forum

    Ich versuche nun bereits seit längerer Zeit einen Login bei einer Website. Nutze ich ein WebBrowser Control ist das soweit auch kein Problem, ich muss es allerdings ohne schaffen.

    Wenn ich einen Request sende:

    Dim User = "nutzername", Pwd = "pass"
            Dim MainpageRequest As HttpWebRequest = CType(WebRequest.Create("https://www.auto-partner.net/portal/at"), HttpWebRequest)
            Dim MainpageResponse As HttpWebResponse = GetResponse(MainpageRequest)
            Dim MainpageresponseString As String = RequestStreamToString(MainpageResponse.GetResponseStream)

    bekomme ich folgendes zurück Header + HTML:

    X-Frame-Options: DENY
    Content-Language: en-US
    Keep-Alive: timeout=15, max=26
    Connection: Keep-Alive
    Transfer-Encoding: chunked
    Content-Type: text/html;charset=UTF-8
    Date: Mon, 25 Jan 2016 14:13:04 GMT
    Set-Cookie: NSC_WT_xxx.bvup-qbsuofs.ofu=ffffffff09f70d1a45525d5f4f58455e445a4a423660;expires=Mon, 25-Jan-2016 14:43:04 GMT;path=/;httponly


    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    	<head>
    		<meta charset="utf-8">
    		<title>Partner.Net Anmeldung</title>
    
    
    <!--[if IE]><link rel="shortcut icon" type="image/x-icon" href="/resources/images/favicon/favicon.ico?version=6.3.1.1"><![endif]-->
    <link rel="icon" type="image/x-icon" href="/resources/images/favicon/favicon.ico?version=6.3.1.1">
    		
    		<style type="text/css">
    			@import url("/resources/style/login.css?version=6.3.1.1");
    			@import url("/resources/style/pnetHead.css?version=6.3.1.1");
    		</style>
    <style type="text/css">
    	@import url("/resources/style/facebox.css?version=6.3.1.1");
    </style>
    
    <script type="text/javascript" src="/resources/javascript/jquery.js?version=6.3.1.1"></script>
    <script type="text/javascript" src="/resources/javascript/facebox.js?version=6.3.1.1"></script>
    <script type="text/javascript" src="/resources/javascript/message.js?version=6.3.1.1"></script>
    <script type="text/javascript" src="/resources/javascript/error.js?version=6.3.1.1"></script>
    
    <script type="text/javascript">
    		var errorHandler = new Error();
    		
    </script>
    
    <!--
    
    	 -->
    		
    		<script type="text/javascript">
    
    			$(document).ready(function() {
    				var errors = false;
    				
    
    				if(errors) {
    					//TODO: Facebox mit enter schließen und focus in username
    				}
    				else
    					$('#j_username').focus();
    			});
    
    			var alreadySubmitted = false;
    			
    			function submitLogin() {
    				if (inputOK())
    					$('#form').submit();
    				else
    					//errorHandler wird auf errors.jsp initialisiert
    					errorHandler.showErrors();
    			}
    
    			function checkSubmit() {
    			}
    			
    			function inputOK() {
    				var ok = false;
    
    				if (!alreadySubmitted) {
    				  var cUser = $('#j_username').val();
    				  var cPass = $('#j_password').val();
    
    				  if (cUser.length == 0) {
    					  errorHandler.addMessage('Username is required');
    				  }
    				  else {
    				    if (cPass.length == 0) {
    				    	errorHandler.addMessage('Password is requried');
    				    }
    				    else {
    				      ok = true;
    				      alreadySubmitted = true;
    				    }
    				  }
    				}  
    			 	return ok;
    			}
    
    			function onKeyDownHandler(event) {
    	    		if (!event)
    	    			event = window.event;
    
    					if (event.keyCode == 13) {
    						window.setTimeout("submitLogin()", 250);
    						
    						//stop event
    						if (event.preventDefault) {
    							event.preventDefault();
    							event.stopPropagation();
    						} 
    						else
    							event.returnValue = false;
    					}
    	    	}
    
    			var resizeTimeout = null;
    			var loginDiv = null;
    
    			$(document).ready(function() {
    				loginDiv = $('#login');
    				
    				$(window).resize(function(){
    					if(resizeTimeout != null)
    						clearTimeout(resizeTimeout);
    
    					resizeTimeout = setTimeout(function() {
    						doResize();
    					}, 50);
    				});
    
    				doResize();
    			});
    
    			function doResize() {
    				var headerHeight = $('#header').height();
    				
    				if(loginDiv != null) {
    					var left = ($(window).width() / 2) - (loginDiv.width() / 2);
    
    					var top = (($(window).height() + headerHeight) / 2) - (loginDiv.height() / 2);
    
    					if(top < headerHeight + 10)
    						top = headerHeight + 10;
    					
    					loginDiv.css('top', top + "px");
    					loginDiv.css('left', left + "px");
    				}
    			}
    		</script>
    	</head>
    	
    	<body>
    		<form id="form" action="/auth/j_spring_security_check;jsessionid=2835DA6F46AD6967927E1BAE68477CB9" method="post">
    			
    
    
    <script type="text/javascript" src="/resources/javascript/jquery.js?version=6.3.1.1"></script>
    <script type="text/javascript" src="/resources/javascript/pnetHead.js?version=6.3.1.1"></script>
    		
    <script type="text/javascript">
    	$(document).ready(function() {
    		new PnetHead({
    			headContainer: 'header',
    			title: '/resources/images/header_logo.png?version=6.3.1.1',
    			titleIsImage: true,
    			renderFunction: generateEmptyHead
    			}).generateHead();
    	});
    </script>
    
    <div id="header"></div>
    			
    			<div id="login" class="login">
    				<div style="; height: 210px;">
    					<img class="titleImage" src="/resources/images/login.jpg?version=6.3.1.1" alt="&nbsp;"/>
    					<h1 class="title">
    						Welcome to Partner.Net!
    					</h1>
    				</div>
    				<div id="loginForm" class="loginForm">
    					<table>
    						<colgroup>
    							<col style="width:70px"/>
    							<col style="width:320px"/>
    						</colgroup>
    						<tr>
    							<td>Username</td>
    							<td><input type="text" id="j_username" name="j_username" value="" onkeydown="javascript:onKeyDownHandler(event)" /></td>
    						</tr>
    						<tr>
    							<td style="padding-top: 10px;">Password</td>
    							<td style="padding-top: 10px;"><input type="password" id="j_password" name="j_password" onkeydown="javascript:onKeyDownHandler(event)" /></td>
    						</tr>
    						<tr>
    							<td colspan="2" style="padding-top: 20px;">
    								<a class="linkImage" href="/auth/login/resetPassword;jsessionid=2835DA6F46AD6967927E1BAE68477CB9">Password lost?</a>
    								<div class="right">
    									<a class="hot-button" href="javascript:submitLogin();">Login</a>
    								</div>
    							</td>
    						</tr>
    					</table>
    				</div>
    				<div class="footer">
    					If you have problems with the login, please contact your IT department.
    				</div>
    			</div>
    		</form>
    	</body>
    </html>
    

    Dann hol ich mir die Session und versuche einen Post für den Login wie folgt aber leider ohne Erfolg, ich bekomme eine HTML Seite mit "Session Timed Out" zurück:

            Dim sessionstring As String = Regex.Match(MainpageresponseString, "<form id=""form"" action=[\""'](.+?)[\""']", RegexOptions.IgnoreCase).Groups(0).Value
           
            Dim LoginRequest As HttpWebRequest = CType(WebRequest.Create("https://www.auto-partner.net/portal/at;jsessionid=;" & sessionstring), HttpWebRequest)
            Dim LoginResponse As HttpWebResponse = GetResponse(LoginRequest, " j_username=" & User & "&j_password=" & Pwd)
            Dim LoginResponseString As String = RequestStreamToString(LoginResponse.GetResponseStream)
    

    Hier noch die Hilfsfunktionen:

       Private Function GetResponse(_request As HttpWebRequest, Optional post As String = "") As HttpWebResponse
            _request.CookieContainer = Cookie
            _request.Method = "POST"
            _request.ContentType = "application/x-www-form-urlencoded"
    
            Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
            _request.ContentLength = byteArray.Length
            Dim DataStream1 As Stream = _request.GetRequestStream()
            DataStream1.Write(byteArray, 0, byteArray.Length)
            Dim Response1 As HttpWebResponse = _request.GetResponse()
    
            DataStream1.Close()
            DataStream1.Dispose()
    
            Return Response1
        End Function
    
        Private Function RequestStreamToString(_stream As Stream) As String
            Dim reader1 As New StreamReader(_stream)
            Dim ServerResponse1 As String = reader1.ReadToEnd()
            reader1.Close()
            reader1.Dispose()
    
            Return ServerResponse1
        End Function
    
        Private Function GetHeaders(_response As HttpWebResponse) As String
            Dim ret As String = ""
            For i As Integer = 0 To _response.Headers.Keys.Count - 1
                ret += _response.Headers.GetKey(i) & ": " & String.Join(", ", _response.Headers.GetValues(i)) & vbNewLine
            Next
            Return ret
        End Function

    Vieleicht kann mir jemand einen schubs in die richtige Richtung geben...

    Besten Dank im Voraus

    lg Sascha

    Montag, 25. Januar 2016 14:21

Antworten

Alle Antworten