为 HttpURLConnection 添加标头

新手上路,请多包涵

我正在尝试使用 HttpUrlConnection 为我的请求添加标头,但方法 setRequestProperty() 似乎不起作用。服务器端没有收到任何带有我的标头的请求。

 HttpURLConnection hc;
    try {
        String authorization = "";
        URL address = new URL(url);
        hc = (HttpURLConnection) address.openConnection();

        hc.setDoOutput(true);
        hc.setDoInput(true);
        hc.setUseCaches(false);

        if (username != null && password != null) {
            authorization = username + ":" + password;
        }

        if (authorization != null) {
            byte[] encodedBytes;
            encodedBytes = Base64.encode(authorization.getBytes(), 0);
            authorization = "Basic " + encodedBytes;
            hc.setRequestProperty("Authorization", authorization);
        }

原文由 Minh-Ha Le 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 659
2 个回答

我过去使用过以下代码,它与在 TomCat 中启用的基本身份验证一起工作:

 URL myURL = new URL(serviceURL);
HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();

String userCredentials = "username:password";
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes()));

myURLConnection.setRequestProperty ("Authorization", basicAuth);
myURLConnection.setRequestMethod("POST");
myURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
myURLConnection.setRequestProperty("Content-Length", "" + postData.getBytes().length);
myURLConnection.setRequestProperty("Content-Language", "en-US");
myURLConnection.setUseCaches(false);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);

你可以试试上面的代码。上面的代码是 POST 的,你可以修改它为 GET

原文由 Cyril Beschi 发布,翻译遵循 CC BY-SA 4.0 许可协议

只是因为我在上面的答案中没有看到这些信息,最初发布的代码片段无法正常工作的原因是 encodedBytes 变量是 byte[] 而不是一个 String 值。如果您将 byte[] 传递给 new String() 如下所示,代码片段可以完美运行。

 encodedBytes = Base64.encode(authorization.getBytes(), 0);
authorization = "Basic " + new String(encodedBytes);

原文由 Joseph Cozad 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题