3P by GN⁺ | ★ favorite | 댓글 1개

--libcurl 사용하기

  • libcurl 사용 권장: 사용자들은 먼저 curl 명령줄 도구를 사용하여 원하는 전송을 시도하고, 원하는 대로 대략 작동하면 명령줄에 --libcurl [파일명] 옵션을 추가하여 다시 실행하도록 권장됨.
  • 코드 생성: --libcurl 명령줄 옵션은 제공된 파일 이름으로 C 프로그램을 생성함. 이 C 프로그램은 libcurl을 사용하여 curl 명령줄 도구가 수행한 전송을 실행함.
  • 예외와 차이점: 항상 100% 일치하지는 않지만, 사용하고자 하는 libcurl 옵션과 추가 인자에 대한 훌륭한 영감을 제공할 수 있음.

예시 코드

  • 실행 예시: curl http://example.com --libcurl example.c 명령을 실행하면 현재 디렉토리에 example.c 파일이 생성됨.
  • 생성된 코드: 생성된 코드에는 curl_easy_setopt()을 사용한 다양한 옵션 설정이 포함되어 있으며, 일부 옵션은 소스로 쉽게 생성되지 않아 사용자가 직접 구현하거나 사용하지 않을 수 있음.

GN⁺의 의견

  • libcurl의 유용성: 이 기능은 개발자들이 명령줄에서 작동하는 curl 명령을 C 프로그램으로 쉽게 변환할 수 있게 해주어, libcurl을 사용하는 응용 프로그램 개발을 가속화함.
  • 코드 생성의 장점: 자동으로 생성된 코드는 개발자가 libcurl API를 더 빠르게 이해하고 적용하는 데 도움이 될 수 있음.
  • 학습 도구로서의 가치: 초급 소프트웨어 엔지니어에게 libcurl 옵션과 네트워크 프로그래밍의 실제 적용 사례를 보여주는 좋은 학습 자료가 될 수 있음.

댓글과 토론

Hacker News 의견들
  • 브라우저 개발자 도구의 네트워크 탭에서 원하는 요청을 찾아 “copy as curl”로 복사한 뒤, https://curlconverter.com/ 같은 도구로 사용하는 언어의 요청 코드로 변환하는 패턴이 아주 좋음
    어떤 면에서 curl은 어디로든 번역할 수 있는 중간 표현처럼 쓰임

    • R 사용자는 httr을 최근 다시 쓴 httr2 패키지의 curl_translate 함수로 “copy as curl” 명령을 요청 코드로 바꿀 수 있음
      https://httr2.r-lib.org/reference/curl_translate.html
    • curlconverter.com은 바로 북마크할 만큼 좋아 보임
      브라우저의 “copy as curl”은 인증과 인코딩 헤더가 확실히 동작하는 상태로 들어가서, 직접 여러 줄짜리 curl 명령을 만지작거리는 것보다 훨씬 편리함
    • API 엔드포인트를 문제 해결할 때 훨씬 쉬워졌음
      요청 매개변수를 바꿔 로컬 인스턴스에 날려볼 수도 있고, jq로 파이프해 출력 형식을 다듬을 수도 있음
    • 엔드포인트가 안 될 때 첫 단계가 “curl로는 되나?”가 되는 건 정말 맞는 관찰임
    • HTTP 자체에 중간 표현이 필요한 건 아니지만, cURL의 보편성 때문에 사실상 그렇게 작동하게 됨
      워낙 널리 쓰이니 요청을 cURL로 내보내는 도구도 생기고, cURL을 가져오는 도구도 생김
  • 명령줄 인터페이스에 현재 명령과 같은 일을 하는 프로그램 소스 코드를 뱉는 플래그가 있다는 건 꽤 멋짐
    보닛을 열어 내부에서 무슨 일이 일어나는지 보여주는 느낌이고, 동작을 더 잘 이해하게 해줄 뿐 아니라 필요에 맞게 수정하거나 확장하기도 쉬워짐

    • 프로그래밍 라이브러리 문서로도 훌륭함
      libcurl을 쓰다가 범위 요청 같은 게 필요해졌거나 브라우저 네트워크 탭에서 “copy as curl”을 했다면, 명령줄에서 실행한 뒤 --libcurl만 붙여 C 라이브러리로 정확히 어떻게 하는지 알 수 있음
    • 이런 방식이 Gnome 설정, 네트워크 설정, 방화벽 설정 GUI, 그리고 CLI 명령으로 동작 가능한 모든 것에도 적용되면 좋겠음
  • 이런 방식은 Microsoft Office의 Visual Basic 매크로가 성공한 이유 중 하나였음
    Word나 Excel에서 동작을 수행하고, 생성된 매크로를 본 뒤, 코드를 필요에 맞게 고칠 수 있었음. 단순하면서 강력한 개념이라 curl에서도 보게 되어 반가움

    • Microsoft도 비슷하게 유용한 도구를 만들었는데, 특정 Office 문서의 구조를 살펴보고 그 구성 요소를 생성하는 C# 코드를 볼 수 있게 해줌
      오래 업데이트되지는 않은 듯함: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
    • 이런 것에는 일반화된 패턴이 있을 법함
      Amiga의 AREXX도 떠오름
    • Visual Studio의 WPF 편집기에서 보던 Excel 쪽 병렬 XAML/UI도 비슷하게 떠오름
  • 컴파일하려면 gcc에서 -lcurl을 붙이는 식으로 libcurl 링크를 알려줘야 함
    예를 들면 curl https://ifconfig.me --libcurl ip_fetcher.c로 IP 주소와 ip_fetcher.c를 만들고, gcc -o ip_fetcher ip_fetcher.c -lcurl로 컴파일한 뒤 ./ip_fetcher를 실행하면 IP 주소가 출력됨
    C 코드를 매일 쓰지 않는 사람에게는 이런 기본 링크 단계도 유용한 정보임

    • 직접 cc 명령을 치는 것보다 make가 더 편하면 더 쉬운 방식도 있음
      curl https://ifconfig.me --libcurl ip_fetcher.c 이후 make LDFLAGS=-lcurl ip_fetcher, 그리고 ./ip_fetcher를 실행하면 됨
  • 홍보를 조금 하자면, Hurl은 libcurl을 이용해 일반 텍스트로 HTTP 요청을 실행하고 테스트하는 오픈소스 CLI임
    libcurl의 높은 신뢰성과 HTTP/3 같은 기능을 쓰면서, 요청 연결, 응답에서 데이터 캡처 후 다음 요청으로 전달, JSONPath·XPath 같은 응답 테스트 기능을 더했음
    REST/SOAP/GraphQL API 요청을 위한 문법 설탕도 있지만 핵심은 그냥 libcurl이고, verbose 옵션을 쓰면 curl 명령도 grep할 수 있음. 관리자로 참여 중임
    https://hurl.dev

  • 이런 기능이 ffmpeg에도 가능하면 좋겠음

  • Daniel Stenberg은 세부 사항과 개발자·사용자 경험을 정말 꼼꼼히 챙김
    이 정도 다듬기는 놀라울 수준임

  • Daniel Stenberg 본인이 curl 명령줄 옵션 대부분을 훑어보는 3시간짜리 영상에서 이 옵션을 언급했던 기억이 있음
    https://www.youtube.com/watch?v=V5vZWHP-RqU

  • 제출 제목은 전각 대시와 하이픈 조합(—-)이 아니라 하이픈 두 개(--)여야 함

    • 푸터의 Contact 링크로 운영자에게 이메일을 보내면 이걸 보고 고칠 수 있음
  • 이 옵션이 원래 curl 호출을 감싸는 스크립트를 대체할 수 있는 컴파일 가능한 C 프로그램을 만들어준다는 뜻인가?

    • 맞음. libcurl로는 원래 가능했지만, 그동안은 상용구 코드를 직접 써야 했음
    • 생성된 C 코드를 기존 프로그램에 복사해 붙이거나, 최소한 해당 curl 호출을 재현하려면 어떤 libcurl API 호출이 필요한지 확인하는 참고 자료로 쓸 수 있다는 아이디어임
    • 일반 웹페이지 등에 유용하게 쓰려면 매개변수를 몇 개 수정해야 할 가능성이 큼
      문서를 몇 시간 뒤지지 않도록 해주는 출발점으로 보는 편이 맞음