day 16 http 주고받는 과정
강의/부캠 안드로이드 학습정리

day 16 http 주고받는 과정

https://velog.io/@doomchit_3/Internet-HTTP-%EA%B0%9C%EB%85%90%EC%B0%A8%EB%A0%B7-IMBETPY

 

[Internet] HTTP? 개념잡기 통신과정-IMBETPY

⚔ HTTP란? 대량의 정보가 흐르는 곳이라면 언제나 효율적인 교류를 위한 규칙이 존재한다. 예를들어 주식시장에서 거래를 하고 싶다면 이름, 계좌, 거래일자, 금액 등 정해진 규칙을 지켜 거래를

velog.io

 

https://goodgid.github.io/HTTP-Communicate-Process/

 

HTTP을 사용한 통신 과정

Index

goodgid.github.io

 

DNS로 url 이름가지고 ip찾는거랑 네트워크 계층이랑 연결되니까 뭔가 재밌다.

 

https://velog.io/@hwi_chance/Kotlin-10%EC%9E%A5.-%EC%95%B1-%EA%B0%9C%EB%B0%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

 

[Kotlin] 10장. 앱 개발 - 네트워크

이것이 안드로이드다 with 코틀린(고돈호 지음)으로 공부한 내용 정리

velog.io

 

 

 

https://www.york.ac.uk/teaching/cws/wws/webpage1.html

 

webpage1

STARTING . . . There are lots of ways to create web pages using already coded programmes. These lessons will teach you how to use the underlying HyperText Markup Language - HTML. HTML isn't computer code, but is a language that uses US English to enable te

www.york.ac.uk

 

위 서버 ip가 168.126.63.1이라 wire shark에서도 168.126.63.1이 찍힌다.

밑 왼쪽이 16진수인건 알겠는데 오른쪽이 뭔지 모르겠음. 두고두고 수정하거나 글 쓰면서 분석해봐야 할듯.

 

 


jsoup 이라는게 있어서 html의 tag들을 element 단위로 불러오는게 있다.

 

System.currentTimeMillis()
val html = Jsoup.parse(output.toString())
val tags = html.select("img, script")
when (src.split(".").last()) {
                "png", "gif", "jpg" -> imageList.add(src.split("/").last())
                "css", "js" -> codeList.add(src.split("/").last())
            }

 

이미 불러왔던 페이지를 한번 더 불러오면 캐시된걸 불러와서 출력표시가 조금 다르다.

 

 

string을 많이 불러올경우 stringbuilder를 사용하는게 메모리적으로 효율적이다.

set으로 하는것도 있지만 list의 distinct().count() 로 하는 방법도 있음.

 

//각 tag마다 따로 처리
    private fun downloadFromTag(tagName: String, tags: Elements) {
        when (tagName) {
            "script" -> {
                tags.forEach {
                    download(it.attr("src"), false)
                }
            }
            "img" -> {
                tags.forEach {
                    download(it.attr("src"), false)
                }
            }
            "link" -> {
                tags.forEach {
                    download(it.attr("href"), false)
                }
            }
        }
    }

하는 방법도 있음.

 

http 받는걸 비동기로도 받을 수 있음. 여기선 굳이 필요없었지만 유용할 듯.

/**
     * http 리퀘스트를 보내고 response 받는 함수
     * await 을 통해 비동기 리턴값 받음
     */
    private suspend fun fetchUrl(url: String): HttpResponse<String> {
        totalFetchCount++
        val uri = URI(url)
        val request = HttpRequest.newBuilder().uri(uri)
            .build()
        val response = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString())
        return response.await()
    }