是否可以在获得响应之前检查HTTP发布请求的身份验证状态?

时间:2013-07-26 15:55:41

标签: java post httprequest urlconnection

我正在使用java.net.HttpURLConnection。

我首先将post请求的主体写入与URLConnection对象关联的OutputStream。

完成后,我关闭OutputStream,然后调用getInputStream()或getResponseCode()或getHeaderFields()。当我发现提供的凭证是否被认为有效或无效时。

这是有问题的,因为我不想再次发出相同的帖子请求(并且必须重新上传其内容,其中可能包括大文件),如果用户凭据由于某种原因被拒绝。 / p>

如果在调用getResponseCode()或getHeaderFields()之后尝试调用getOutputStream()时抛出异常,那么在尝试上载数据之前如何确保接受用户凭据?

有没有办法解决这个问题,还是仅仅是服务器的配置方式?

1 个答案:

答案 0 :(得分:1)

简短的回答是:你做不到。

基本身份验证是无状态的。当您执行POST / PUT时,用户凭据将作为该HTTP请求的标头发送。在整个操作完成之前(即在您发送数据有效负载之后),它们不会被处理。

为了做你正在谈论的事情,你需要编写一个通过会话管理分别管理登录和文件/数据上传的Web服务,允许你首先进行身份验证(返回某种会话令牌)然后通过单独的HTTP请求发送数据。

编辑添加:实际上,您可以通过简单地对需要身份验证的内容进行GET来解决这个问题。如果成功,您知道POST也将成功禁止在两个请求之间使服务器端无效的凭据。我不建议这样做,但它会起作用。