HTTP request message๋ HTTP header์ HTTP body๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
(์ฐธ๊ณ ๋ก, HTTP ๋ฉ์์ง์ ๋ํ ๋ ์์ธํ ์ค๋ช ์ ์ด์ ์ ๋ฐ๋ก ์ ๋ฆฌํด๋์๋ค.)
ํค๋์๋ ์ฌ๋ฌ ๊ฐ์ง ํ์ํ ์ ๋ณด๋ค์ด ๋ด๊ธฐ๋๋ฐ,
์ด ์ค Content-Type์ HTTP body์ ๋ด๊ธด ๋ฐ์ดํฐ ํ์
์ด ๋ฌด์์ธ์ง ๋ช
์ํ๋ ์ญํ ์ ํ๋ค.
Content-Type์ ์ข
๋ฅ๋ก๋ ๋ํ์ ์ผ๋ก text/html, text/css, text/javascript, application/json, application/x-www-urlencoded, multipart/form-data ๋ฑ์ด ์๋ค.
์ด ์ค์์, ํ์ผ ์ ์ก์ ์ฌ์ฉ๋๋ multipart format์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค.
(Content-Type: multipart/form-data)
โ
๋ฉํฐํํธ ํฌ๋งท ๋ฐ์ดํฐ ์ ์ก
- ๋ณด๋ด๋ ค๋ ํ์ผ์ ๋ฌธ์์ด๋ก ๋ํ๋ด๊ณ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
- ๋๋์ด์ง ๊ฐ ๋ถ๋ถ(ํํธ)์ ๋ํ ์ค๋ช (ํค๋)๋ฅผ ๋ฌ์์ body์ ์ถ๊ฐํ๋ค.
- ๊ฐ ํํธ๋ ์์์ ๋ฌธ์์ด์ธ boundary์ ์ํด ๊ตฌ๋ถํ๋ค.
- ์ฝ๊ฒ ๋งํ๋ฉด body์ ๋ด๊ธด ๊ฒ์ ์ฌ๋ฌ ๊ฐ์ "ํค๋+content" ์กฐ๊ฐ๋ค์ด๋ค.
- ๊ฐ "ํค๋+content" ์กฐ๊ฐ์ form-data ํ์ ์ด๋ค.
- body๋ form-data ํ์ ์ ์กฐ๊ฐ ์ฌ๋ฌ ๊ฐ๋ก ์ด๋ฃจ์ด์ง multipart ํ์ ์ด๋ค.
- ๋ฐ๋ผ์, body์ Content-Type์ multipart/form-data๋ก ์ ์ด์ค๋ค.
- Boundary๋ก ๊ตฌ๋ถ๋์ด ๋๋์ด์ง ๊ฐ ๋ถ๋ถ(ํํธ)์ ์์ ๋ง์ ํค๋๋ฅผ ๊ฐ์ง๋ค๊ณ ํ๋ค.
- ์ ์กํ๊ณ ์ ํ๋ ํ์ผ(content)์ ์ค์ ๋ฐ์ดํฐ ํ์ ์ ๋ฐ๋ก ์ฌ๊ธฐ์ ๋ช ์๋๋ค. (Content-Type: ํ์ ๋ช ํ์)
๐ฅ ๋ฉํฐํํธ ๋ฉ์์ง body ์์
์์ฃผ ๊ฐ๋จํ ๋ํ๋ด์๋ฉด ์๋์ ๊ฐ๋ค.
--boundary ํค๋ ํ์ผ ๋ด์ฉ (๋ฌธ์์ด) --boundary ํค๋ ํ์ผ ๋ด์ฉ (๋ฌธ์์ด) --boundary-- |
--๋ฐ์ด๋๋ฆฌ : ํํธ์ ์์์ ์๋ฆฐ๋ค.
--๋ฐ์ด๋๋ฆฌ-- : ๋งจ ๋ง์ง๋ง ํํธ ์๋์ ์ ์ด์ ๋์ ์๋ฆฐ๋ค.
๐ฅ ๊ฐ ํํธ์ ํค๋๋ฅผ ํ๋์ฉ ๋ฏ์ด๋ณด์.
Content-Disposition: form-data; // ์ด ๋ฐ์ดํฐ ํํธ๋ form๋ฐ์ดํฐ ํ์์ด๋ผ๋ ์๋ฏธ
name="name"; // ๋ฐ์ดํฐ ํํธ(ํ๋)์ ์ด๋ฆ (ํ์ํญ๋ชฉ)
filename="fileName" // ํ์ผ์ ์
๋ก๋ํ๋ ๊ฒฝ์ฐ ํ์ผ ์ด๋ฆ์ ์ ์ด์ฃผ์ด์ผ ํ๋ค.
Content-Type: image/png // ์ด ๋ฐ์ดํฐ ํํธ์ ๋ด๊ธด content๋ image/png ํ์
์ด๋ผ๋ ์๋ฏธ์ด๋ค.
โ HTTP request message ์ง์ ์์ฑํด๋ณด๊ธฐ!
์ด๋ ๊ฒ ์๊ธด hi.txt๋ผ๋ ํ์ผ์ form data ํ์์ผ๋ก POST ์ ์กํด๋ณด๊ธฐ ์ํด
HTTP request message๋ฅผ ์์ฑ, ์ถ๋ ฅํ๋ ์์ฃผ์์ฃผ ๊ฐ๋จํ ์ฝ๋๋ฅผ ์ง๋ณด์๋ค.
JAVA
final String BOUNDARY = "----AAAA";
final String LINEFEED = "\r\n";
// ํค๋ ์์ฑ
StringBuilder header = new StringBuilder();
header.append("POST /post HTTP/1.1\n");
header.append("Content-Type: multipart/form-data; boundary=" + BOUNDARY + "\n");
// ๋ฐ๋ ์์ฑ
StringBuilder body = new StringBuilder();
body.append("--" + BOUNDARY + LINEFEED);
body.append("Content-Disposition: form-data; name=\"upload\"; filename=\"hi.txt\"\n");
body.append("Content-Type: text/plain\n");
body.append(LINEFEED);
int len;
try(FileReader reader = new FileReader("/Users/sylim/hi.txt")){
char[] buffer = new char[1024];
while((len=reader.read(buffer)) != -1){
body.append(buffer, 0, len);
}
} catch (IOException ignore){ }
body.append(LINEFEED);
body.append("--" + BOUNDARY + "--");
body.append(LINEFEED);
// HTTP request message ์ถ๋ ฅ
String httpRequestMessage = header.toString() + "\n" + body.toString();
System.out.println(httpRequestMessage);
โ ์ฐธ๊ณ ์๋ฃ References
- https://www.youtube.com/watch?v=V5vZWHP-RqU
- https://jw910911.tistory.com/117