我正在尝试发送 http GET 请求。请求如下所示:
https://example.com/verify?name="A"&grade="A"
Header: "myheader":"abcde1213"
这是一个自定义 header ,用于验证此请求的发送者。
我使用 Postman 和curl 尝试过,它有效。但是,当我尝试在 Android 中使用 HttpURLConnection 在代码中执行此操作时,我总是从服务器收到 401 错误 - 表明上述 key 的身份验证不起作用。
我在代码中添加的内容:
URL obj = new URL(GetURL);
HttpURLConnection con = obj.openConnection();
con.setRequestMethod("GET");
con.addRequestProperty("myheader","abcde1213");
我什至执行了 getRequestProperty("myheader") 并验证它返回了正确的值。
但是,服务器没有获取此值,并给我一个 401 错误。进一步调查发现http请求参数和 header 是不同的。上述addRequestParameter或setRequestParameter函数仅添加或更新http请求参数,不设置 header 。
通过快速在线搜索,我在 HttpURLConnection 中也没有看到任何合适的方法来添加 header 。请建议我们如何做到这一点。
如上所述,带有上述 header 的http请求确实可以在curl和Postman上工作,没有任何错误 - 这告诉我使用 header 的请求和身份验证确实有效。但是,使用上面的 HttpUrlConnection 类无法正确设置 header 。
提前致谢!
编辑:我查看了共享的链接。问这个问题的人可能和我有同样的问题,但提供的解决方案似乎有很大不同。在这里,我尝试通过在 http 请求中使用自定义 header 来授权用户,该 header 对于我正在交谈的 Rest API 服务器是唯一的。
我无法添加这个自定义 header 。在在这里发布之前,我已经尝试过建议的大部分解决方案。
注意:想重申一下 - 上述请求适用于curl 和Postman。 Postman 可以选择生成请求所需的代码,但对于 Java,它只使用一些库而不是 HttpURLConnection 方法。
最佳答案
请像这样使用:
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);
关于java - 使用 HttpURLConnection 添加自定义 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55179290/