리눅스 URL 데이터 전송

LinuxBeginner
지금 연습하기

소개

Linux URL 데이터 전송 랩에 오신 것을 환영합니다. 이 랩에서는 Linux 시스템에서 URL 을 사용하여 데이터를 전송하는 방법을 배우게 됩니다. 이는 시스템 관리자, 개발자 및 보안 전문가에게 필수적인 기술입니다.

주요 학습 도구는 URL 구문을 사용하여 데이터를 전송하는 강력한 명령줄 유틸리티인 curl입니다. 웹사이트에서 데이터를 검색하고, 콘텐츠를 파일에 저장하며, 다양한 HTTP 메서드를 사용하고, 다양한 옵션으로 요청을 사용자 정의하는 방법을 배우게 됩니다.

이 랩을 마치면 실제 시나리오에서 일반적으로 사용되는 필수 데이터 전송 기술에 대한 실질적인 경험을 얻게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 95%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

curl 기본 이해

curl은 URL 구문을 사용하여 데이터를 전송하는 명령줄 도구입니다. HTTP, HTTPS, FTP 등 다양한 프로토콜을 지원합니다. 이 단계에서는 웹 콘텐츠를 검색하기 위한 curl의 기본 사용법을 배우게 됩니다.

터미널을 열어 시작해 보겠습니다. 터미널은 이미 /home/labex/project 디렉토리에 있어야 합니다. 그렇지 않은 경우 다음을 사용하여 이 디렉토리로 변경할 수 있습니다.

cd ~/project

첫 번째 curl 명령어

curl을 사용하여 웹사이트에서 콘텐츠를 검색하는 것으로 시작해 보겠습니다. 다음 명령을 입력하십시오.

curl http://example.com

이 명령을 실행하면 example.com 의 HTML 콘텐츠가 터미널에 표시됩니다. 이 출력에는 HTML 태그와 웹 페이지의 모든 콘텐츠가 포함됩니다. 출력은 다음과 유사해야 합니다.

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
    ...
</head>
<body>
    <div>
        <h1>Example Domain</h1>
        <p>This domain is for use in illustrative examples in documents...</p>
        ...
    </div>
</body>
</html>

이는 curl의 가장 기본적인 사용법을 보여줍니다. 즉, URL 의 콘텐츠를 검색하여 터미널에 직접 표시하는 것입니다.

출력 이해

보이는 출력은 서버에서 반환된 원시 HTML 응답입니다. 브라우저를 사용하여 웹사이트를 방문하면 브라우저는 이 HTML 을 해석하고 서식 있는 웹 페이지로 렌더링합니다. 그러나 curl은 단순히 원시 콘텐츠를 표시합니다.

다른 콘텐츠를 보기 위해 다른 예를 시도해 보겠습니다. 다음을 실행합니다.

curl https://httpbin.org/json

이번에는 JSON 응답이 표시됩니다. 출력은 다음과 같아야 합니다.

{
  "slideshow": {
    "author": "Yours Truly",
    "date": "date of publication",
    "slides": [
      {
        "title": "Wake up to WonderWidgets!",
        "type": "all"
      },
      {
        "items": [
          "Why <em>WonderWidgets</em> are great",
          "Who <em>buys</em> WonderWidgets"
        ],
        "title": "Overview",
        "type": "all"
      }
    ],
    "title": "Sample Slide Show"
  }
}

보시다시피 curl은 서버가 제공하는 내용에 따라 다양한 유형의 콘텐츠를 검색할 수 있습니다.

파일에 출력 저장

많은 경우, 터미널에서 단순히 보는 것보다 검색한 콘텐츠를 저장하고 싶을 수 있습니다. 이 단계에서는 curl 출력을 파일에 저장하는 방법을 배우게 됩니다.

출력 리디렉션을 사용하여 저장

curl 명령의 출력을 저장하는 가장 간단한 방법은 > 연산자를 사용하여 리디렉션을 사용하는 것입니다. 다음 명령을 실행합니다.

curl http://example.com > example.html

이 명령은 example.com 에서 콘텐츠를 검색하여 현재 디렉토리에 example.html이라는 파일로 저장합니다. 파일이 생성되었는지 확인하려면 다음을 실행합니다.

ls -l example.html

파일 크기 및 기타 세부 정보와 함께 파일이 나열되어야 합니다.

파일의 내용을 확인하려면 cat 명령을 사용할 수 있습니다.

cat example.html

이전에 터미널에 표시되었던 것과 동일한 HTML 콘텐츠가 표시되어야 합니다.

curl 의 -o 옵션 사용

curl은 검색된 콘텐츠를 파일에 저장하기 위한 특정 옵션 -o (또는 --output) 를 제공합니다. 이는 출력 리디렉션으로 인해 문제가 발생할 수 있는 경우에 특히 유용합니다. 시도해 보겠습니다.

curl -o httpbin_data.json https://httpbin.org/json

이 명령은 httpbin.org 에서 JSON 데이터를 httpbin_data.json이라는 파일로 저장합니다. 다음을 사용하여 파일 생성을 확인합니다.

ls -l httpbin_data.json

그리고 다음을 사용하여 내용을 확인합니다.

cat httpbin_data.json

데이터 디렉토리 생성

파일을 정리하는 것이 좋습니다. 전용 데이터 디렉토리를 생성하고 (아직 존재하지 않는 경우) 거기에 일부 콘텐츠를 저장해 보겠습니다.

mkdir -p data
curl -o data/google_data.txt http://www.google.com

mkdir -p 명령은 data 디렉토리가 아직 존재하지 않는 경우 생성합니다. -p 플래그는 디렉토리가 이미 존재하는 경우 오류가 보고되지 않도록 합니다.

이제 파일이 데이터 디렉토리에 생성되었는지 확인합니다.

ls -l data/google_data.txt

파일이 세부 정보와 함께 나열되어야 합니다.

curl 고급 옵션 사용법

curl은 요청을 사용자 정의할 수 있는 많은 옵션을 제공합니다. 이 단계에서는 가장 유용한 옵션 중 일부에 대해 배우게 됩니다.

상세 모드 (Verbose Mode)

-v (또는 --verbose) 옵션은 curl에게 요청 및 응답에 대한 자세한 정보를 표시하도록 지시합니다. 이는 디버깅에 특히 유용합니다. 다음을 실행합니다.

curl -v http://example.com

다음과 같은 많은 정보를 볼 수 있습니다.

  • curl 에서 보낸 요청 헤더
  • 연결 세부 정보
  • 서버의 응답 헤더
  • 응답의 실제 콘텐츠

출력은 다음과 유사하게 보일 것입니다 (일부 세부 정보는 다를 수 있음).

*   Trying 93.184.216.34:80...
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Age: 578793
< Cache-Control: max-age=604800
< Content-Type: text/html; charset=UTF-8
< Date: Tue, 26 Dec 2023 13:45:32 GMT
< Etag: "3147526947+ident"
< Expires: Tue, 02 Jan 2024 13:45:32 GMT
< Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
< Server: ECS (dcb/7F83)
< Vary: Accept-Encoding
< X-Cache: HIT
< Content-Length: 1256
<
<!doctype html>
<html>
<head>
    <title>Example Domain</title>
    ...

*로 시작하는 줄은 curl 자체의 정보 메시지입니다.
>로 시작하는 줄은 요청 헤더입니다.
<로 시작하는 줄은 응답 헤더입니다.
실제 콘텐츠는 응답 헤더 다음에 옵니다.

사용자 정의 헤더 (Custom Headers)

때로는 요청과 함께 특정 헤더를 보내야 합니다. 이를 위해 -H (또는 --header) 옵션을 사용할 수 있습니다. 사용자 정의 User-Agent 를 설정해 보겠습니다.

curl -H "User-Agent: MyCustomClient/1.0" https://httpbin.org/user-agent

이 명령은 사용자 정의 User-Agent 헤더와 함께 httpbin.org 에 요청을 보냅니다. 응답은 사용자 정의 User-Agent 가 수신되었음을 확인해야 합니다.

{
  "user-agent": "MyCustomClient/1.0"
}

리디렉션 따라가기 (Following Redirects)

기본적으로 curl은 HTTP 리디렉션을 따르지 않습니다. -L (또는 --location) 옵션을 사용하여 리디렉션을 따르도록 할 수 있습니다. 시도해 보겠습니다.

curl -L http://github.com

-L 옵션이 없으면 리디렉션 응답만 받게 됩니다. -L을 사용하면 curl 이 리디렉션을 따라 최종 대상의 콘텐츠를 표시합니다.

이러한 옵션을 연습하기 위해 데이터 디렉토리에 파일을 만들어 보겠습니다.

curl -v -L -o data/redirect_example.txt http://github.com

이 명령은 다음을 수행합니다.

  1. 상세 모드 사용 (-v)
  2. 리디렉션 따르기 (-L)
  3. 출력을 data/redirect_example.txt에 저장
  4. github.com 에서 콘텐츠 요청

파일이 생성되었는지 확인합니다.

ls -l data/redirect_example.txt

파일이 세부 정보와 함께 나열되어야 합니다.

HTTP 메서드 및 데이터 전송

curl은 기본 GET 메서드 외에도 다양한 HTTP 메서드를 지원합니다. 이 단계에서는 다양한 HTTP 메서드를 사용하고 요청과 함께 데이터를 전송하는 방법을 배우게 됩니다.

POST 메서드 사용

POST 메서드는 일반적으로 서버에 데이터를 제출하는 데 사용됩니다. -X 옵션을 사용하여 HTTP 메서드를 지정하고 -d 옵션을 사용하여 데이터를 제공할 수 있습니다. 시도해 보겠습니다.

curl -X POST -d "name=John&age=25" https://httpbin.org/post

이 명령은 httpbin.org 에 폼 데이터와 함께 POST 요청을 보냅니다. 응답은 보낸 데이터를 다시 에코해야 합니다.

{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "age": "25",
    "name": "John"
  },
  "headers": {
    "Accept": "*/*",
    "Content-Length": "16",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.81.0",
    "X-Amzn-Trace-Id": "Root=1-65b..."
  },
  "json": null,
  "origin": "your-ip-address",
  "url": "https://httpbin.org/post"
}

JSON 데이터 전송

JSON 데이터를 전송하려면 Content-Type 헤더를 지정해야 합니다. 다음을 실행합니다.

curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":25}' https://httpbin.org/post

응답에는 JSON 데이터가 포함되어야 합니다.

{
  "args": {},
  "data": "{\"name\":\"John\",\"age\":25}",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Content-Length": "24",
    "Content-Type": "application/json",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.81.0",
    "X-Amzn-Trace-Id": "Root=1-65b..."
  },
  "json": {
    "age": 25,
    "name": "John"
  },
  "origin": "your-ip-address",
  "url": "https://httpbin.org/post"
}

다른 HTTP 메서드 사용

curl은 모든 표준 HTTP 메서드를 지원합니다. PUT 요청을 시도해 보겠습니다.

curl -X PUT -d "data=example" https://httpbin.org/put

DELETE 요청도 시도할 수 있습니다.

curl -X DELETE https://httpbin.org/delete

각 명령은 요청의 세부 정보를 보여주는 응답을 반환합니다.

POST 요청의 출력을 파일에 저장해 보겠습니다.

curl -X POST -d "name=John&age=25" -o data/post_response.json https://httpbin.org/post

파일이 생성되었는지 확인합니다.

ls -l data/post_response.json

그리고 내용을 확인합니다.

cat data/post_response.json

이전에 표시된 것과 유사한 httpbin.org 의 JSON 응답을 볼 수 있습니다.

파일 다운로드 및 진행 상황 모니터링

curl은 인터넷에서 파일을 다운로드하는 데 매우 뛰어납니다. 이 단계에서는 파일을 다운로드하고 다운로드 진행 상황을 모니터링하는 방법을 배우게 됩니다.

기본 파일 다운로드

파일을 다운로드하려면 앞서 배운 -o 옵션을 사용할 수 있습니다. 샘플 이미지를 다운로드해 보겠습니다.

curl -o data/sample.jpg https://httpbin.org/image/jpeg

이 명령은 httpbin.org 에서 JPEG 이미지를 다운로드하여 data 디렉토리에 sample.jpg로 저장합니다.

파일이 다운로드되었는지 확인합니다.

ls -l data/sample.jpg

진행률 표시줄로 다운로드

더 큰 파일을 다운로드할 때는 진행 상황을 확인하는 것이 유용합니다. -# 옵션을 사용하여 진행률 표시줄을 표시할 수 있습니다.

curl -## -o data/sample_with_progress.jpg https://httpbin.org/image/jpeg

다음과 같은 진행률 표시줄을 볼 수 있습니다.

######################################################################### 100.0%

자동 이름으로 출력 파일 옵션 사용

원격 파일과 동일한 파일 이름을 사용하려면 -O (대문자 O) 옵션을 사용할 수 있습니다.

cd data
curl -O https://httpbin.org/image/jpeg
cd ..

이렇게 하면 파일이 다운로드되어 data 디렉토리에 jpeg (URL 의 마지막 부분) 로 저장됩니다.

파일이 다운로드되었는지 확인합니다.

ls -l data/jpeg

중단된 다운로드 재개

다운로드가 중단된 경우 -C - 옵션을 사용하여 재개할 수 있습니다.

curl -C - -o data/resume_example.jpg https://httpbin.org/image/jpeg

이렇게 하면 curl이 다운로드를 어디서부터 재개할지 자동으로 결정합니다.

다운로드 속도 제한

--limit-rate 옵션을 사용하여 다운로드 속도를 제한할 수 있습니다.

curl --limit-rate 100K -o data/rate_limited.jpg https://httpbin.org/image/jpeg

이렇게 하면 다운로드 속도가 100KB/s로 제한됩니다.

여러 파일 다운로드

단일 명령으로 여러 파일을 다운로드할 수 있습니다.

curl -o data/image1.jpg https://httpbin.org/image/jpeg -o data/image2.png https://httpbin.org/image/png

이렇게 하면 JPEG 및 PNG 이미지가 다운로드되어 각각 image1.jpgimage2.png로 저장됩니다.

두 파일이 모두 다운로드되었는지 확인합니다.

ls -l data/image1.jpg data/image2.png

요약

이 랩에서는 URL 을 사용하여 데이터를 전송하는 강력한 명령줄 도구인 curl을 사용하는 방법을 배웠습니다. 이제 다음 사항에 대한 실질적인 경험을 갖게 되었습니다.

  1. 웹 콘텐츠를 검색하기 위한 curl 의 기본 사용법
  2. 리디렉션 및 -o 옵션을 사용하여 curl 출력을 파일에 저장
  3. 상세 모드 (-v), 사용자 정의 헤더 (-H), 리디렉션 따라가기 (-L) 와 같은 고급 curl 옵션 사용
  4. 다양한 HTTP 메서드 (GET, POST, PUT, DELETE) 사용 및 데이터 전송
  5. 파일 다운로드 및 다운로드 진행 상황 모니터링

이러한 기술은 시스템 관리, 웹 개발, API 테스트 및 자동화 스크립트의 많은 작업에 필수적입니다. curl 명령은 다양한 기술 분야에서 널리 사용되며 사실상 모든 Linux 배포판, macOS 및 Windows 에서도 사용할 수 있습니다.

Linux 및 네트워킹 여정을 계속 진행하면서 curl 에는 이 랩에서 다룬 것보다 훨씬 더 많은 옵션과 기능이 있다는 것을 기억하십시오. 자세한 내용은 항상 curl 매뉴얼 (man curl) 을 참조할 수 있습니다.