gpt4 book ai didi

java - 为 HttpURLConnection 获取 404

转载 作者:太空狗 更新时间:2023-10-29 15:36:08 25 4
gpt4 key购买 nike

我在 Heroku 中部署了一项服务,该服务可生成 pdf 文件输出。当我在浏览器中点击 URL 时,我可以下载 pdf 文件(我没有提示保存(根据我的要求),它会自动保存到代码中定义的路径)。因此服务已启动并可用。但是当我使用 HttpURLConnection 访问它时,出现 404 错误。 .谁能帮我解决这个问题?

以下是我正在访问的链接: http://quiet-savannah-7144.herokuapp.com/services/time/temp

这是部署在 Heroku 服务器中的服务代码:

@jawax.ws.rs.core.Context
ServletContext context;

@GET
@path("/temp")
@Produces("application/pdf")
public Response getPdf() throws IOException{
InputStream is = context.getResourceAsStream("/static/temp.pdf");
ResponseBuilder res = Response.ok(is);
res.header("Content-Disposition","attachment; filename=temp.pdf");
return res.build();
}

注意:我的文件位于 webapp/static/temp.pdf 位置

客户端代码如下:

 try {
URL url = new URL("http://quiet-savannah-7144.herokuapp.com/sevices/time/temp");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/json");
int code = conn.getResponseCode();
System.out.println("code>>"+code+"<<");
if (conn.getResponseCode() == 200) {
System.out.println("*************************done****************************");
InputStream inputStream = conn.getInputStream();
OutputStream output = new FileOutputStream("D:/copyOfTest.pdf");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
output.close();
} else {
Scanner scanner = new Scanner(conn.getErrorStream());
while(scanner.hasNext())
System.out.println(scanner.next());
scanner.close();
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

我尝试了 pdf 和 x-pdf 的内容类型,如下所示,没有任何效果

 conn.setRequestProperty("Content-Type", "application/pdf");
conn.setRequestProperty("Content-Type", "application/x-pdf");

当我在我机器的 Tomcat 服务器中本地部署服务时,一切都很好。在过去的 6 个小时里,我一直在努力解决这个问题,但没有任何线索。实际上我必须在 android AsyncTask 中获取它。如果我能够在 java 中做到这一点,那么我也可以在 android 中实现同样的目标。有人可以帮我解决这个问题。

提前致谢

最佳答案

我看到了一些问题。

首先,如果你做一个 GET 你不应该写 conn.setDoOutput(true);因为您没有从您的应用程序输出到服务器。

其次,Content-Type header 是您发送到服务器的内容类型,而不是相反,因此由于您没有发送任何内容而只是进行获取,因此不应设置它。

相反,如果您愿意,您可以设置 Accept header 。

关于java - 为 HttpURLConnection 获取 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com