반응형
Http용 헤더 추가URL 접속
다음을 사용하여 요청에 대한 헤더를 추가하려고 합니다.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);
}
이전에 다음과 같은 코드를 사용한 적이 있으며, 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
변수는 a입니다.byte[]
이 아니라String
만약 당신이 합격한다면byte[]
에 대해서new String()
코드 스니펫은 아래와 같이 완벽하게 동작합니다.
encodedBytes = Base64.encode(authorization.getBytes(), 0);
authorization = "Basic " + new String(encodedBytes);
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);
드디어 이게 통했어
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
Rest Assuard를 사용하면 다음 작업도 수행할 수 있습니다.
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
순서 1: Http 취득URL연결 오브젝트
URL url = new URL(urlToConnect);
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();
순서 2: HTTP에 헤더 추가setRequestProperty 메서드를 사용한 URL Connection.
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));
}
참조 링크
언급URL : https://stackoverflow.com/questions/12732422/adding-header-for-httpurlconnection
반응형
'sourcecode' 카테고리의 다른 글
VueJS 체크박스의 모델 배열 (0) | 2022.07.23 |
---|---|
속성을 지정합니다.단일 파일 구성 요소 vue js에 $el이 정의되지 않았습니다. (0) | 2022.07.23 |
C/C++ 프로그램이 main()보다 먼저 크래시 할 수 있는 방법이 있습니까? (0) | 2022.07.23 |
Nuxtjs가 비동기 데이터 내에서 Firestore 데이터를 가져옵니다. (0) | 2022.07.23 |
main()은 C와 C++에서 무엇을 반환해야 합니까? (0) | 2022.07.23 |