본문으로 건너뛰기

HTTPie CheatSheet

Wiki Security Web Httpie

보안 진단을 하며 여러 유형의 HTTP 요청을 보내는 일이 잦은데요,
curl 대신 유용하고 편리하게 사용할 수 있는 HTTPie를 사용하고 있습니다.

기본적인 사용법이 아닌, 헷갈리거나 기억하기 어려운 유형들을 모아봤습니다.
(사실 제가 사용하려고 모아둔겁니다.)

혹시 틀린 점이 있다면 댓글로 알려주세요! ☺

GET + Parameter with NULL
#

NULL 값은 URL에 포함시켜 요청해야 합니다.

http -v GET "http://skitttles.me/test?hello=world%00"

아래와 같이 HTTPie 명령어 포맷에 맞춰 요청할 경우, %가 URL 인코딩되어 요청됩니다.

http -fv GET https://google.com/test "hello==world\%00"

GET /test?hello=world%5C%2500 HTTP/1.1
...

GET Param[0]=value&Param[1]=value2
#

http -fv GET http:/skitttles.me/test "hello[0]==world" "hello[1]==world2"

GET key[please]=1
#

http -fv GET http:/skitttles.me/test "key[please]==1"

Header X-Forwarded-Host
#

X-Forsarded-Host

리버스 프록시(LB, CDN)가 포함된 환경에서는 호스트와 포트가 변경될 수 있는데,

이러한 환경에서 실질적인 호스트를 표시할 수 있는 헤더입니다.

X-Forwarded-Host - HTTP | MDN

http -v GET http:/skitttles.me/test X-Forwarded-Host:ruff.com

GET /path/../path
#

이러한 유형의 요청은 여러 계층의 역방향 프록시가 있는 애플리케이션을 테스트할 때 매우 유용합니다. --path-as-is 옵션 설정

http -v --path-as-is GET http:/skitttles.me/test/../test

GET /path;path
#

--path-as-is 옵션 설정

http -v GET "http:/skitttles.me/test;test"

GET /path#path
#

이러한 유형의 요청은 여러 계층의 역방향 프록시가 있는 애플리케이션을 테스트할 때 매우 유용합니다.

❯ http -v GET "http:/skitttles.me/test%23test"

POST Multipart File
#

http -fv POST http:/skitttles.me/test 'file@dummy.txt'

POST Multipart + filename=../
#

httpie로는 filename에 ../을 추가하여 전송이 안됩니다. [ HTTPie ]

 http -fv POST http:/skitttles.me/test 'filename@dummy.txt;filename=../../dummy.txt'
 
# http: error: 'filename@dummy.txt;filename=../../dummy.txt': [Errno 2] No such file or directory: 'dummy.txt;filename=../../dummy.txt'

curl로 아래와 같이 파일명을 변경하여 전송 가능하였습니다. [ curl ]

❯ curl --verbose http:/skitttles.me/test \
-F "filename=@dummy.txt;filename=../../dummy.txt"

POST XML data
#

XML 포맷이 올바르지 않은 경우, 인코딩하여 전송합니다.

cat dummy.xml | http -v POST http:/skitttles.me/test Content-Type:application/xml

POST YAML
#

yaml 포맷을 지켜야 합니다. (key: value)

http -fv POST http:/skitttles.me/test Content-Type:application/yaml \
--raw="key: please"

GET Basic Auth
#

http -v -a id:password GET http:/skitttles.me/test