0

我正在使用 java.net.HttpURLConnection。

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

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

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

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

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

4

1 回答 1

1

简短的回答是:你不能那样做。

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

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

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

于 2013-07-26T16:15:22.350 回答