java - 使用 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 方法。
解决方案
请像这样使用:
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);
推荐阅读
- python - 如何解决 Jsondecodeerror:期望值:第 1 行第 1 列(字符 0)?
- delphi - 使用返回键从 TEdit 移动到 TDBGrid 时出现问题
- swiftui - 同时手势不适用于 SwiftUI 中的 ZoomableScrollView
- python - Python:SciPy DCT 不适用于大型矩阵
- c# - 有没有办法使用正则表达式拆分 I[1,2]?
- typescript - 如何使用 D3 的链接生成器偏移贝塞尔曲线的源点和目标点?
- gitlab - GitlabCI thow AIX 服务器
- rabbitmq - 在作为 MqttBroker 实现的 RabbitMQ 服务器中订阅失败
- swift - Int 的 NSPredicate 语法
- python - 我想计算 4digits 数字的 sha256 散列函数