我正在尝试发送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请求参数,不设置标头。
通过快速在线搜索,我在HttpURLConnection中看不到任何合适的方法来添加标头。请建议我们如何做到这一点。
如上所述,带有上述标头的这个http请求确实可以在curl和Postman上运行而没有任何错误 - 这告诉我使用标头的请求和身份验证确实有效。但是,使用上面的HttpUrlConnection类没有正确设置标头。
提前致谢!
编辑:我查看了共享的链接。问这个问题的人可能和我有同样的问题,但提供的解决方案似乎有所不同。在这里,我试图通过在http请求中使用自定义标头来授权用户,这是我正在与之交谈的Rest API服务器所特有的。
这是我无法添加的自定义标头。在发布此处之前,我已经尝试了大多数建议的解决方案。
注意:想重申 - 上述请求适用于curl和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);