9.1 웹 클라이언트

  • 낮은 수준의 네트워크 배관을 전송 제어 프로토콜/인터넷 프로토콜 TCP/IP 라고함
  • TCP/IP는 컴퓨터 간의 바이트를 전송하지만, 그것이 무엇을 의미하는지는 상관없다.
  • 이 바이트를 해석하는 것은 더 높은 수준의 프로토콜 HTTP이다.
  • 웹은 클라이언트-서버 시스템
  • 클라이언트는 서버에 대한 요청(request)를 만듬
  • 이 요청은 TCP/IC 커넥션을 열고 HTTP를 통해 URL과 다른 정보들을 보낸다.
  • 그리고 요청에 대한 응답을 받는다.
  • 응답 포맷 또한 HTTP에 의해 정의 됨.
  • 가장 잘 알려진 웹 클라이언트는 웹 브라우저다.
  • 웹 브라우저는 다양한 방법으로 HTTP요청을 만든다.
  • 웹 브라우저의 주소창에 URL를 입력하거나 링크를 클릭하여 요청 가능.
  • HTTP의 중요한점은 무상태 라는 것.
  • 웹 브라우저에서 생성된 각 HTTP 커넥션은 모두 독립적.
  • 캐싱 : 변하지 않는 원격 콘텐츠는 웹 클라에 저장하고 다시 서버로 부터 콘텐츠 다운로드를 피하기 위해 저장된 콘텐츠를 사용.
  • 세션 : 쇼핑 웹사이트는 쇼핑 카드의 콘텐츠를 기억해야 한다.
  • 인증 : 아이디와 비밀번호를 요구하는 사이트는 사용자가 로그인할 때, 이둘을 기억하여 사용자를 식별한다.

    9.1.1 텔넷으로 테스트하기

    9.2.2 파이썬 표준 웹 라이브러리

    import urllib.request as ur
    url = 'http://quotesondesign.com/wp-json/posts'
    conn = ur.urlopen(url)
    print(conn)
    

<http.client.HTTPResponse object at 0x7f1bb01aee48>

data = conn.read()
print(data)

b’’

  • 이코드로 서버에 TCP/IP 커넥션을 열었고, HTTP요청을 만들었고, HTTP응답을 받았다.
  • HTTP상태 코드는 응답에서 가장 중요한 부분중 하나다.
    print(conn.status)
    

    200

  • 1xx(조건부 응답) - 요청은 받았지만, 추가 정보가 필요하다.
  • 2xx(성공) - 성공적으로 처리, 200이외의 모든 성공 코드는 추가사항을 전달함.
  • 3xx(리다이렉션) - 리소스가 이전되어 클라이언트에 새로운 URL을 응답해줌.
  • 4xx(클라이언트 에러) - 404는 클라이언트 측에 문제가 있다.
  • 5xx(서버 에러) - 500은 서버 에러를 나타낸다. 웹 서버와 백엔드 애플이케이션 서버가 연결되어 있지않다면 502를 본다.
    print(conn.getheader('Content-type'))
    

    application/json; charset=UTF-8

    for key, value in conn.getheaders():
    print(key, value)
    

    Server nginx Date Wed, 28 Feb 2018 10:26:07 GMT Content-Type application/json; charset=UTF-8 Content-Length 322 Connection close X-Powered-By PHP/5.4.13 X-Content-Type-Options nosniff Link </wp-json/posts?page=2>; rel=”next”, https://quotesondesign.com/wp-json/posts/2463; rel=”item”; title=”Antoine de Saint-Exupery” X-WP-Total 1065 X-WP-TotalPages 1065 Last-Modified Wed, 07 Feb 2018 14:46:58 GMT X-Powered-By PleskLin

    9.1.3 표준 라이브러리를 넘어서 :Request

    import requests
    url = 'http://quotesondesign.com/wp-json/posts'
    resp = requests.get(url)
    resp
    

<Response [200]>

print(resp.text)

[{“ID”:2463,”title”:”Antoine de Saint-Exupery”,”content”:”<p>If you want to build a ship, don’t drum up people to collect wood and don’t assign them tasks and work, but rather teach them to long for the endless immensity of the sea.<\/p>\n”,”link”:”https:\/\/quotesondesign.com\/antoine-de-saint-exupery-4\/”}]

Comments