IOException:“接收到的身份validation请求为空”(Apache Harmony / Android)
我想通过Android的HttpURLConnection(这是一个org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection)发送一个GET,并在收到响应后,抛出一个IOException:
在doRequestInternal()中:“接收到的authentication质询为空”
这个错误是什么意思,是什么造成的? 我正在给授权标题写OAuth参数,但我也在其他场合也这样做,没有问题。
if (connection == null) { connection = (HttpURLConnection) new URL(endpointUrl).openConnection(); connection.setRequestMethod("GET"); } //... do some OAuth message signing connection.connect(); int statusCode = connection.getResponseCode(); // throws IOException
我find了原因。
首先,所有谁不知道这个错误意味着什么(我当然不是):如果服务器回复一个401,则抛出此exception。非常直观,考虑到它是在getResponseCode()(你永远无法检查自己的401,但必须赶上这个IOException,而不是…)。
401的真正原因是我没有发送一个OAuthvalidation器代码,在这一点上它是预期的。
也许会对某人有用…
这个exception只是意味着格式错误的回答头:没有find“WWW-Authenticate”头。 此外,用401代码分块的答案不被支持,所以你需要“Content-Length”标题(可以是零)。
只要将这个头添加到请求(在服务器端):
WWW-Authenticate: None
请注意,有两种身份validation方法: HTTP身份validation和基于令牌的身份validation 。 如果您使用的是HTTP身份validation,则必须遵循引用的规范:在服务器端包含WWW-Authenticate头字段,在本地使用java.net.Authenticator
等。如果您使用的是基于令牌的身份validation,那么显然您必须使用Cookie存储令牌,并能够保持长期活着的会话。 在这种情况下把下一个代码放到android.app.Application.onCreate()
CookieManager cookieManager = new CookieManager(); CookieHandler.setDefault(cookieManager);
在没有WWW-Authenticate头字段的情况下从服务器收到HTTP 401时,您将不会遇到麻烦。
- 如何在Android上自动播放HTML5的MP4video?
- 如何replace弃用的android.support.v4.app.ActionBarDrawerToggle
- 在Android Studio中集成第三方库的最佳方式
- 用于Java / Android的zxing QR阅读器库的替代品?
- 自动展开并关注SearchView
- 是否有可能在ScrollView中有一个ViewPager?
- HttpURLConnection冰淇淋三明治FileNotFoundException
- 如何创build一个按字母顺序排列的滚动条,在android中显示所有的字母?
- 我怎样才能将aidl文件添加到Android工作室(从应用程序开票示例)