n72上不能获得302跳转地址

有一个联网下载的需求,带上参数打开一个连接,然后服务器302跳转返回下载地址。

在N72上折腾了好几天。。。最后终于查到 原来是N72 KVM的bug。。。

参考:

http://labs.chinamobile.com/mblog/99251_23543 写道
在做个J2ME基于Browser的Widget应用,用HttpConnection建立连接,当解析到WEB服务器的redirect时即HttpConnection getResponseCode()响应返回302状态时在模拟器上访问没有问题,在Nokia N72手机上访问时取不到getHeaderField("location")的值(即值为null),后来找到Nokia的fourm去看才知道是KVM的Bug,影响平台包括S60 1st Edition、S60 2nd Edition(FP1/FP2/FP3)的手机,这个问题不存在第三版及新设备中,在基于S60第三版的N73上本人已经测试过了。
具体连接请参考:
标题为:
KVM crashes when reading content with HTTP "302 Found" response on N90 and 6680(http://discussion.forum.nokia.com/forum/showthread.php?t=77062)
KIJ000660(http://wiki.forum.nokia.com/index.php/KIJ000660_-_getHeaderField%28%22Location%22%29_returns_null_in_S60_devices)

 

HttpConnection/302/ HTTP_TEMP_REDIRECT

关键词

详细描述

当用HttpConnection读取远端数据,而远端返回状态码302表示重定向时,继续调用openInputStream来读取输入流将会导致程序崩溃。

 

此种现象发生在以下机型:

Nokia N90/

6600/6630/6680

 

N70不会崩溃但也不会正常运行。

根据协议规定,此时的Location头域中保存了你应该重新请求的地址。

请看

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3 来了解更多关于"302 Found"

 

也就是说,此时用HttpConnection.getHeaderField("Location")来得到具体的跳转url,然后重新向新地址发起请求。

 

代码示范:

 

private HttpConnection open(String url) throws IOException {

HttpConnection c;

int status = -1;

 

// Open the connection and check for redirects

while (true) {

c = (HttpConnection) Connector.open(url);

 

// Get the status code,

// causing the connection to be made

status = c.getResponseCode();

 

if ((status == HttpConnection.HTTP_TEMP_REDIRECT)

|| (status == HttpConnection.HTTP_MOVED_TEMP)

|| (status == HttpConnection.HTTP_MOVED_PERM)) {

 

// Get the new location and close the connection

url = c.getHeaderField("location");

c.close();

} else {

break;

}

}

 

// Only HTTP_OK (200) means the content is returned.

if (status != HttpConnection.HTTP_OK) {

c.close();

throw new IOException("Response status not OK");

}

return c;

}

 

 

http://www.cnblogs.com/zhengyun_ustc/archive/2006/07/24/nokiahttpconnection302.html


 

你可能感兴趣的:(C++,c,PHP,C#,Nokia)