如何在 Java 中处理 HTTP 403 禁止的错误?

 

有时,当尝试从Java客户端使用Web服务时,即使可以从Web浏览器正常访问该服务,也会获得403禁止的HTTP响应代码。

由于缺少身份验证属性,不一定会发生HTTP 403禁止错误,某些Web服务仅会授权Web浏览器或某些特定的客户端访问它们,而它们拒绝来自第三方客户端的任何请求。

#问题

从公共Web服务检索某些数据时出现HTTP 403错误,而在Web浏览器中运行相同的URL链接时我能够成功检索它们。

这确实是大多数开发人员在使用Web服务时面临的非常普遍的问题。

# 解析度

通常,通过模仿Web浏览器请求来解决此问题,以便Web服务像处理Web浏览器一样处理Java客户端。

首先要做的是在Web浏览器上运行服务URL,并使用“ 实时http标头”插件(或任何等效方法)从浏览器记录传递的标头属性。 以下是从浏览器记录的典型请求:

GET /feeds HTTP/1.1
Host: publicservice.com:443
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: OGP=-4061129:; SID=FAYIU7tO....
Referer: https://clients5.google.com/pagead/drt/dn/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
X-Client-Data: CIa2yQEIpLbJAQjBtskBCKmdygEIqKPKARiSo8oB

如前所述, “ User-Agent”标头指定了试图访问该服务的客户端的名称和类型,因此,为了模仿Web浏览器,我们需要将此标头添加到我们的请求中。 以下是如何使用HttpUrlConnection添加它:

String url = "https://publicservice.com/feeds";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");

翻译自: https://www.javacodegeeks.com/2018/05/how-to-handle-http-403-forbidden-error-in-java.html

你可能感兴趣的:(java,http,web,ajax,tomcat)