I have made a HttpConne开发者_开发技巧ction in BlackBerry. It has return me a successful login but I am unable to retrieve the cookie as there isn't one in the header. Does anyone know how I can get the cookie?
This is the code..
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 )
Double check the service API. Maybe you're expecting something that doesn't exist (service doesn't use cookie) or maybe you didn't use the API as expected (service supports cookie but service request didn't ask for one).
Or, but the service API should tell it, the cookie is generate locally with javascript. In this case, you won't find a header entry and you'll have to execute the script code to set the cookie.
精彩评论