首页 > 解决方案 > 使用 HttpURLConnection 添加自定义标头

问题描述

我正在尝试发送一个 http GET 请求。这是请求的样子:

https://example.com/verify?name="A"&grade="A"

Header: "myheader":"abcde1213"

这是一个自定义标头,用于验证此请求的发送者。

我使用 Postman 和 curl 进行了尝试,它可以工作。但是,当我尝试在 Android 中使用 HttpURLConnection 在代码中执行此操作时,我总是从服务器收到 401 错误 - 表明上述密钥的身份验证不起作用。

我在代码中添加的内容:

URL obj = new URL(GetURL);
HttpURLConnection con = obj.openConnection();
 con.setRequestMethod("GET");
con.addRequestProperty("myheader","abcde1213");

我什至做了一个 getRequestProperty("myheader") 并验证它返回正确的值。

但是,服务器没有接收到这个值并且给了我一个 401 错误。经过进一步调查,事实证明 http 请求参数和标头是不同的。上述 addRequestParameter 或 setRequestParameter 函数只添加或更新 http 请求参数,不设置 headers。

从快速的在线搜索中,我也没有在 HttpURLConnection 中看到任何合适的方法来添加标题。请建议我们如何做到这一点。

如上所述,带有上述标头的这个 http 请求确实可以在 curl 和 Postman 上正常工作,没有任何错误 - 这告诉我使用标头的请求和身份验证确实有效。但是,使用上面的 HttpUrlConnection 类没有正确设置标头。

提前致谢!

编辑:我查看了共享的链接。问这个问题的人可能和我有同样的问题,但提供的解决方案似乎大不相同。在这里,我试图通过在 http 请求中使用自定义标头来授权用户,该标头对于我正在与之交谈的 Rest API 服务器是唯一的。

这是我无法添加的自定义标题。在此处发布之前,我已经尝试了大多数建议的解决方案。

注意:想重申一下——上述请求适用于 curl 和 Postman。Postman 可以选择生成请求所需的代码,但对于 Java,它只使用一些库而不是 HttpURLConnection 方法。

标签: javaandroidhttpurlconnection

解决方案


请像这样使用:

URL url = new URL("your string url");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
String token = "" + new String(accessToken);
con.setRequestMethod("GET");
con.setRequestProperty("AuthToken", token);
con.setReadTimeout(15000);
con.setConnectTimeout(15000);
con.setDoOutput(false);

推荐阅读