从 cloudFlare 获取请求时出现 403(禁止)错误

问题描述 投票:0回答:1

我有一个图像上传到 S3 存储桶,我想通过 Cloudflare (CDN) 访问该图像。当我尝试通过在浏览器中输入 URL 或使用 Postman 来查看图像时,我可以毫无问题地看到图像。

但是,当我尝试在 Spring Boot 应用程序中使用 Java 获取它时,遇到 403 错误。

我尝试了 3 种获取图像的方法

1.

Image.getInstance(imageUrl)
  1.           RestTemplate restTemplate = new RestTemplate();
              HttpHeaders headers = new HttpHeaders();
              headers.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36");
              HttpEntity<String> entity = new HttpEntity<>(headers);
              byte[] imageData = restTemplate.exchange(imageUrl, HttpMethod.GET, entity, byte[].class).getBody();
    
  2.           URL url = new URL(logoPath);
              URLConnection connection = url.openConnection();
              InputStream inputStream = connection.getInputStream();
              FileOutputStream outputStream = new FileOutputStream("image.png");
              byte[] buffer = new byte[1024];
              int bytesRead;
              while ((bytesRead = inputStream.read(buffer)) != -1) {
                  outputStream.write(buffer, 0, bytesRead);
              }
              inputStream.close();
              outputStream.close();
    

在方法 1 和 3 中,我收到 401(Forbidden) 。 在方法 2 中,得到 301

我可以做什么来解决这个问题?

我想获取此图像直接在文件中使用。

spring-boot spring-mvc amazon-s3 cloudflare cloudflare-apps
1个回答
0
投票

我通过在创建连接或标头时添加“用户代理”解决了此错误。

我还尝试添加多个用户代理,但它对我不起作用。 尝试只添加一个用户代理。

          RestTemplate restTemplate = new RestTemplate();
          HttpHeaders headers = new HttpHeaders();
          headers.set("User-Agent", "Mozilla/5.0 ");
          HttpEntity<String> entity = new HttpEntity<>(headers);
          byte[] imageData = restTemplate.exchange(imageUrl, HttpMethod.GET, entity, byte[].class).getBody();
© www.soinside.com 2019 - 2024. All rights reserved.