HTTP标头中没有cookie

时间:2010-11-30 09:42:03

标签: java blackberry

我在BlackBerry中制作了一个HttpConnection。它已经成功登录我,但我无法检索cookie,因为标题中没有。有谁知道如何获得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 )

1 个答案:

答案 0 :(得分:0)

仔细检查服务API。也许你期待一些不存在的东西(服务不使用cookie)或者你没有按预期使用API​​(服务支持cookie但服务请求没有要求)。

或者,但是服务API应该告诉它,cookie是使用javascript在本地生成的。在这种情况下,您将找不到标题条目,并且您必须执行脚本代码来设置cookie。