2013-01-01 2 views
1

GAE에서 실행되고 특정 페이지에 연결되는 응용 프로그램을 만들고이 페이지에 자동으로 로그인 한 후 html을 받고 처리하려고합니다.java.net 연결을 설정하는 동안 GAE에서 IOException 가져 오기

 this.username = URLEncoder.encode(username, "UTF-8"); 
     this.password = URLEncoder.encode(password, "UTF-8"); 
     this.login = "login"; 

     connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setRequestMethod("POST"); 

     OutputStreamWriter writer = new OutputStreamWriter(
       connection.getOutputStream()); 
     writer.write("str_login=" + login + "&str_user=" + username 
       + "&str_pass=" + password); 
     writer.close(); 

     connection.connect(); 

내가 IOException가 무엇입니까 (connection.connect()) 연결을 establishig 동안 :

여기에 문제가 (writer.write 부분과 connection.connect()) 코드의 일부입니다. 문제는 "application/x-www-form-urlencoded"데이터입니다. 페이지에 잘못된 매개 변수를 전달하면 (예 : str_pasSS, str_usernaAAme 또는 매개 변수가 없음) 로그인 할 수 없지만 로그인 페이지의 html로 응답을받습니다. 따라서 Google App Engine은 이러한 종류의 의사 소통을 지원하지 않습니다. GAE가 지원하는 다른 방법으로이 페이지에 로그인 할 수 있습니까?

Wireshark에서는 사용자 이름과 비밀번호가 라인 기반 텍스트 데이터 (application/x-www-form-urlencoded)로 일반 텍스트로 전송되는 것을 보았습니다. 나는 이것이 안전하지 않다는 것을 안다. 그러나 그것은 그것이있는 방법이다.

+0

당신은 콘텐츠 유형을 설정 봤어? –

+0

예, 시도했지만 도움이 없습니다. 문제는 로컬 (localhost) 앱을 실행할 때 전혀 문제가되지 않는다는 것입니다. Acctually 나는 connection.connect()가 Google App Engine에서 IOException을 던지고있는 것을 보았습니다. – user1940909

답변

0

getOutputStream()을 호출하면 연결이 이미 암시 적으로 설정됩니다. connection.connect()를 다시 호출 할 필요가 없습니다.

출력 작성자를 닫는 대신 flush()를 대신 사용해보십시오. 가장 좋은 방법은

, 당신은 finally 블록에서와 CONN에 폐쇄해야합니다

InputStream in = null; 
OutputStream out = null; 
HttpUrlConnection conn = null; 

try { 
    ... 
} catch (IOException ioe) { 
    ... 
} finally { 
    if (in!=null) {try {in.close()} catch (IOException e) {}} 
    if (out!=null) {try {out.close()} catch (IOException e) {}} 
    if (conn!=null) {try {conn.close()} catch (IOException e) {}} 
} 
+0

마지막으로 해결했습니다. @ d4n3 모든 크레딧은 게시자가 문제를 직접 해결하지 못하더라도 도움이되는 힌트를 제공합니다. 먼저 "너무 많은 리디렉션"예외가 발생한 코드를 다시 작성한 후 일부 문장이 필요하지 않았습니다. 수동으로 리디렉션을 관리해야했고 쿠키를 수동으로 관리해야했기 때문에 로컬에 로그인 할 수 있지만 GAE에 로그인 할 수 없었습니다. 그 후, 모든 것이 잘 작동합니다. – user1940909

관련 문제