java - 使用 HttpURLConnection 添加自定义 header

标签 java android httpurlconnection

我正在尝试发送 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/

相关文章:

java - 为什么在构造函数中赋值时,clone()函数显示不兼容的类型?

java - 等待 Firestore 查询完成

安卓服务 : How to start the Service

java - JFreeChart : How to create a middle panel with an oscillator

java - 无法弄清楚为什么我在数组打印语句中得到空值

java - 查询 Eclipse 插件中的 jar 条目

iphone - 有没有提供建议词的api?

java - 是否可以使用 HEAD 请求获取分块编码文件的长度?

java - 在没有 webview 的情况下加载 URL

android - HttpsUrlConnection EOFException