我在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 )
答案 0 :(得分:0)
仔细检查服务API。也许你期待一些不存在的东西(服务不使用cookie)或者你没有按预期使用API(服务支持cookie但服务请求没有要求)。
或者,但是服务API应该告诉它,cookie是使用javascript在本地生成的。在这种情况下,您将找不到标题条目,并且您必须执行脚本代码来设置cookie。