2010-11-30 97 views
1

我在BlackBerry中创建了一个HttpConnection。它已经返回我一个成功的登录,但我无法检索cookie,因为标题中没有一个。有谁知道我如何获得cookie?HTTP标头中没有cookie

这是代码..

private String login(String URL) 
{ 

    HttpConnection  httpConn = null; 
    DataInputStream  dis = null; 
    DataOutputStream dos = null; 
    StringBuffer  responseMessage = new StringBuffer(); 
    // the request body 

    //Encode the login information in Base64 format. 

    //String username = userName.getString(); 
    //String password = userPassWord.getString(); 
    // username = loginScreen.getUserId(); 
    //password = loginScreen.getPassword(); 
    try { 
     // an HttpConnection with both read and write access 
     net.rim.blackberry.api.browser.URLEncodedPostData login = new net.rim.blackberry.api.browser.URLEncodedPostData(null, false); 
     login.append("username"); //field name , value 
     login.append("password"); 
     httpConn = (HttpConnection)Connector.open(URL, Connector.READ_WRITE); 

     // set the request method to POST 
     httpConn.setRequestMethod(HttpConnection.POST); 
     httpConn.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_TYPE, HttpProtocolConstants.CONTENT_TYPE_APPLICATION_X_WWW_FORM_URLENCODED); 
     httpConn.setRequestProperty("Accept", "text/html");  

     // obtain DataOutputStream for sending the request string 
     dos = httpConn.openDataOutputStream(); 
     byte[] request_body = login.getBytes(); 

     // send request string to server 
     for(int i = 0; i < request_body.length; i++) { 
      dos.writeByte(request_body[i]); 
     }//end for(int i = 0; i < request_body.length; i++)   

     for (int i=0; ; i++) { 
      String headerName = httpConn.getHeaderFieldKey(i); 
      String headerValue = httpConn.getHeaderField(i); 
      if (headerName == null && headerValue == null) { 
       // No more headers 
       break; 
      } else 
       responseMessage.append("headerName : " + headerName + ", headerValue : " + headerValue + "\n");     
     } 

     // obtain DataInputStream for receiving server response 
     dis = new DataInputStream(httpConn.openInputStream()); 

     // retrieve the response from server 
     int data;  
     tmpCookie = httpConn.getHeaderField("Set-Cookie"); 

     responseMessage.append("1st Cookie" + tmpCookie); 
     if (tmpCookie != null) { 
     int semicolon = tmpCookie.indexOf(';'); 
      cookie = tmpCookie.substring(0, semicolon); 
      responseMessage.append("Cookie" + cookie); 
      } 

     responseMessage.append("LOGIN RESPONSE :"); 
     while((data = dis.read()) != -1) { 
      responseMessage.append((char)data ); 

     }//end while((ch = dis.read()) != -1) {   

    } 

    catch(Exception e) 
    { 
     e.printStackTrace(); 
     responseMessage.append("ERROR"); 
    } 
    finally { 
     // free up i/o streams and http connection 
     try { 
      if(httpConn != null) httpConn.close(); 
      if(dis != null) dis.close(); 
      if(dos != null) dos.close(); 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     }//end try/catch 
    }//end try/catch/finally 
    return responseMessage.toString(); 
}//end sendHttpPost(String) 
+0

你是如何创建一个http连接的? – 2010-11-30 09:49:02

+0

http连接是什么?也许该网站不会使用cookies进行会话? – 2010-11-30 09:49:03

回答

0

仔细检查服务API。也许你期望的东西不存在(服务不使用cookie)或者你没有按预期使用API​​(服务支持cookie,但服务请求没有要求使用cookie)。或者,但服务API应该告诉它,cookie是使用javascript在本地生成的。在这种情况下,您将无法找到标题条目,并且必须执行脚本代码才能设置Cookie。