使用HttpURLConnection添加自定义标头

时间:2019-03-15 09:24:02

标签: java android httpurlconnection

我正在尝试发送http GET请求。请求如下所示:

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

Header: "myheader":"abcde1213"

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

我使用邮递员和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。 Postman可以选择生成请求所需的代码,但对于Java,它仅使用某些库,而不使用HttpURLConnection方法。

1 个答案:

答案 0 :(得分:0)

请这样使用:

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);