为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);
}
482130 次浏览

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

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

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

最后这对我有用

private String buildBasicAuthorizationString(String username, String password) {


String credentials = username + ":" + password;
return "Basic " + new String(Base64.encode(credentials.getBytes(), Base64.NO_WRAP));
}

你的代码很好。你也可以用同样的方法。

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

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

如果您正在使用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);

步骤1:获取HttpURLConnection对象

URL url = new URL(urlToConnect);
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();

步骤2:使用setRequestProperty方法向HttpURLConnection添加头信息。

Map<String, String> headers = new HashMap<>();


headers.put("X-CSRF-Token", "fetch");
headers.put("content-type", "application/json");


for (String headerKey : headers.keySet()) {
httpUrlConnection.setRequestProperty(headerKey, headers.get(headerKey));
}

参考链接

这对我有用。 我不得不将请求发送给另一只手,并转移标题“授权”。+ jwt和一些参数通过POST。另一方面,我们用参数和头组成了jettyRequest。如果我发送以下代码序列:

URL url = new URL(serviceURL);
HttpURLConnection myURLConnection = (HttpURLConnection)url.openConnection();
myURLConnection.setRequestMethod("POST");
myURLConnection.setRequestProperty ("Authorization", jwt); // <---- this place
// some code add params

那么我只收到一个体的参数。 如果我发送这个:

URL url = new URL(serviceURL);
HttpURLConnection myURLConnection = (HttpURLConnection)url.openConnection();
myURLConnection.setRequestProperty ("Authorization", jwt); // <---- this place
myURLConnection.setRequestMethod("POST");
// some code add params

然后我收到头授权和参数。