首页 文章

为HttpURLConnection添加标头

提问于
浏览
199

我正在尝试使用 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);
        }

6 回答

  • 1

    我以前使用过以下代码,它在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修改它

  • 6

    只是因为我没有't see this bit of information in the answers above, the reason the code snippet originally posted doesn'正常工作是因为 encodedBytes 变量是 byte[] 而不是 String 值 . 如果您将 byte[] 传递给 new String() ,如下所示,代码段完美无缺 .

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

    如果您使用的是Java 8,请使用以下代码 .

    URLConnection connection = url.openConnection();
    HttpURLConnection httpConn = (HttpURLConnection) connection;
    
    String basicAuth = Base64.getEncoder().encodeToString((username+":"+password).getBytes(StandardCharsets.UTF_8));
    httpConn.setRequestProperty ("Authorization", "Basic "+basicAuth);
    
  • 4

    你的代码很好 . 你也可以用这种方式使用同样的东西 .

    public static String getResponseFromJsonURL(String url) {
        String jsonResponse = null;
        if (CommonUtility.isNotEmpty(url)) {
            try {
                /************** For getting response from HTTP URL start ***************/
                URL object = new URL(url);
    
                HttpURLConnection connection = (HttpURLConnection) object
                        .openConnection();
                // int timeOut = connection.getReadTimeout();
                connection.setReadTimeout(60 * 1000);
                connection.setConnectTimeout(60 * 1000);
                String authorization="xyz:xyz$123";
                String encodedAuth="Basic "+Base64.encode(authorization.getBytes());
                connection.setRequestProperty("Authorization", encodedAuth);
                int responseCode = connection.getResponseCode();
                //String responseMsg = connection.getResponseMessage();
    
                if (responseCode == 200) {
                    InputStream inputStr = connection.getInputStream();
                    String encoding = connection.getContentEncoding() == null ? "UTF-8"
                            : connection.getContentEncoding();
                    jsonResponse = IOUtils.toString(inputStr, encoding);
                    /************** For getting response from HTTP URL end ***************/
    
                }
            } catch (Exception e) {
                e.printStackTrace();
    
            }
        }
        return jsonResponse;
    }
    

    如果授权成功,则返回响应代码200

  • 341

    最后这对我有用

    private String buildBasicAuthorizationString(String username, String password) {
    
        String credentials = username + ":" + password;
        return "Basic " + new String(Base64.encode(credentials.getBytes(), Base64.DEFAULT));
    }
    
  • 2

    使用RestAssurd,您还可以执行以下操作:

    String path = baseApiUrl; //This is the base url of the API tested
        URL url = new URL(path);
        given(). //Rest Assured syntax 
                contentType("application/json"). //API content type
                given().header("headerName", "headerValue"). //Some API contains headers to run with the API 
                when().
                get(url).
                then().
                statusCode(200); //Assert that the response is 200 - OK
    

相关问题