Java 在得到响应之前,是否可以检查HTTP post请求的身份验证状态?

Java 在得到响应之前,是否可以检查HTTP post请求的身份验证状态?,java,post,httprequest,urlconnection,Java,Post,Httprequest,Urlconnection,我正在使用java.net.HttpURLConnection 我首先将post请求的主体写入与URLConnection对象关联的OutputStream 完成后,关闭OutputStream,然后调用getInputStream()或getResponseCode()或getHeaderFields()。这时我才知道提供的凭据是否有效 这是有问题的,因为我不想在用户凭据因某种原因被拒绝的情况下再次发出相同的post请求(并且必须重新上传其内容,其中可能包括大文件) 由于如果在调用getRes

我正在使用java.net.HttpURLConnection

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

完成后,关闭OutputStream,然后调用getInputStream()或getResponseCode()或getHeaderFields()。这时我才知道提供的凭据是否有效

这是有问题的,因为我不想在用户凭据因某种原因被拒绝的情况下再次发出相同的post请求(并且必须重新上传其内容,其中可能包括大文件)

由于如果在调用getResponseCode()或getHeaderFields()后尝试调用getOutputStream(),会引发异常,因此如何确保在尝试上载数据之前接受用户凭据


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

简单的回答是:你不能这么做

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

为了实现您所说的功能,您需要编写一个web服务,该服务通过会话管理分别管理登录和文件/数据上传,允许您首先进行身份验证(返回某种会话令牌),然后通过单独的HTTP请求发送数据


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

你没有;基本身份验证是无状态的,要求凭据随请求一起发送。您必须编写一个具有独立身份验证和会话管理的web服务。