6.4 如何为HttpURLConnection添加头部?| Java Debug 笔记

1,134 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:如何为HttpURLConnection添加头部?

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

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

回答1:

我过去曾使用以下代码,并且已在身份验证中使用这段代码

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

回答2:

您的代码很好,您也可以使用下面代码实现同样的需求

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

回答3:

通过使用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