티스토리 뷰
728x90
object RestUtil : Loggable {
const val RETRIES = 3
const val TIMEOUT = 5 * 60 * 1000
private const val MAX_BODY_SIZE = 0
private const val IGNORE_CONTENT_TYPE = true
fun connection(
url: String,
json: String,
headers: Map<String, String> = emptyMap(),
data: Map<String, String>? = emptyMap(),
timeout: Int? = TIMEOUT
): Connection {
var connection = Jsoup.connect(url)
headers.forEach {
connection = connection.header(it.key, it.value)
}
data!!.forEach {
connection = connection.data(it.key, it.value)
}
return connection
.timeout(timeout!!)
.maxBodySize(MAX_BODY_SIZE)
.ignoreContentType(IGNORE_CONTENT_TYPE)
.requestBody(json)
}
inline fun <reified T> get(
url: String,
json: String,
headers: Map<String, String> = emptyMap(),
data: Map<String, String>? = emptyMap(),
retries: Int? = RETRIES,
timeout: Int? = TIMEOUT,
): T {
var text: String? = null
run loop@{
repeat(retries!!) {
try {
text = connection(url, json, headers, data, timeout = timeout)
.get()
.text()
return@loop
} catch (expected: Exception) {
logger.error(expected.message, expected)
}
}
}
if (text == null) {
throw NotFoundException()
}
return try {
text!!.toObject()
} catch (expected: Exception) {
text as T
}
}
inline fun <reified T> post(
url: String,
json: String,
headers: Map<String, String> = emptyMap(),
data: Map<String, String>? = emptyMap(),
retries: Int? = RETRIES,
timeout: Int? = TIMEOUT,
): T {
var text: String? = null
run loop@{
repeat(retries!!) {
try {
text = connection(url, json, headers, data, timeout = timeout)
.post()
.text()
return@loop
} catch (expected: Exception) {
logger.error(expected.message, expected)
}
}
}
if (text == null) {
throw NotFoundException()
}
return try {
text!!.toObject()
} catch (expected: Exception) {
text as T
}
}
}
https://stackoverflow.com/questions/10506577/jsoup-connections-and-retries
https://stackoverflow.com/questions/37700926/using-jsoup-to-access-html-but-receives-error-code-503
https://jsoup.org/apidocs/org/jsoup/Connection.html
728x90
'공부' 카테고리의 다른 글
[spark] zipWithIndex (0) | 2023.02.26 |
---|---|
[spark] broadcast nested loop join (0) | 2023.02.26 |
[terraform] command (init, apply, plan) (0) | 2023.02.26 |
[hive] `VARCHAR` vs `STRING` -> STRING is winner (0) | 2023.02.26 |
[aws] install `Amazon Corretto 11` (0) | 2023.02.26 |
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 레퍼럴
- wlw
- 테슬라 리퍼럴 코드 혜택
- 테슬라 레퍼럴 적용 확인
- 테슬라 레퍼럴 코드 확인
- 인스타그램
- 모델y
- 어떻게 능력을 보여줄 것인가?
- 개리마커스
- 연애학개론
- 팔로워 수 세기
- 클루지
- 테슬라 리퍼럴 코드 생성
- 모델 Y 레퍼럴
- follower
- Kluge
- 할인
- 테슬라 레퍼럴
- 테슬라 리퍼럴 코드
- 책그림
- 테슬라 크레딧 사용
- 메디파크 내과 전문의 의학박사 김영수
- 테슬라 추천
- 테슬라
- Bot
- COUNT
- 김달
- 유투브
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함