한 걸음 두 걸음
HTTP Methods 본문
HTTP Methods 종류
GET : 표시할 데이터를 받아올 때
POST : 새로 생성한 데이터를 전송할 때
PUT : 수정한 데이터를 전송할 때
HEAD : 대용량 파일 다운로드 등의 GET 요청 전 체크용으로 사용
DELETE : 데이터 삭제 요청
PATCH
OPTIONS
GET, POST가 제일 많이 쓰인다.
GET
client가 보내는 PathVariable받을 때
GET /pathdata/0112 HTTP/1.0 으로 요청하면 서버에서
@RequestMapping("/pathdata/{no}")
private @ResponseBody String pathdata(@PathVariable("no") Integer no ) {
return no+"";
}
0112값을 {no}로 뽑아내서 받는다. 혹은
GET /pathdata?no=0112 HTTP/1.0
이런식으로 요청하면 서버에서
@RequestMapping("/pathdata")
private @ResponseBody String pathdata(String name ) {
return name+"";
}
이런식으로 name도 잘 받는다. (?name 안쓰면 null값)
- url로 조회할 수 있는 get메소드의 특징상 북마크가 가능하며, url로 request를 보낼 수 있지만 post방식은 postman등의 프로그램을 사용해야 보낼 수 있다.
- 보안에 취약하다. 길이 제한이 있다. 캐시 및 브라우저 히스토리에 남는다.
POST
POST /test/demo_form.php HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
이런식으로 query를 작성할 수 있다.
이는 url로 작성할 수 없는 양식이기 때문에 다음과 같이 포스트맨을 활용하여 리퀘스트를 보낸다.
아래는 내가 작성한 아주 간단한 예시의 post 리퀘스트에 대한 리스폰스이다.
@PostMapping("/post")
private @ResponseBody String postTest() {
return "post";
}
이런식으로 별도의 데이터를 받지 않고 post 리퀘스트에 요청에 대해 응답만 하는 식으로 작성했다.
이제 진짜 알아야했던 부분!! 드디어 나왔네, 어플 안쓰고 post 요청 어떻게 해야하는지. 아두에노에서 post 리퀘스트를 텍스트로 적다보니 이 부분을 알아야했다.
클라이언트가 서버로 데이터보낼 때RequestBody에 담아보내고, 서버에서 클라이언트에게 데이터보낼 땐ResponseBody에 담아서 보낸다. 즉, 서버로 데이터가 들어올 때는 ResponseBody타입으로 들어온다.
DataStructure하나 만들어서 통째로 받는 방법
@PostMapping("/postdata")
private @ResponseBody String postDataTest(TestDto data) {
System.out.println("postdata 테스트 호출!! "+data.getName1()+" "+data.getName2());
return "post"+data.getName1();
}
TestDto DataStructure
class TestDto{
private int name1;
private int name2;
public int getName1() {
return name1;
}
public void setName1(int name1) {
this.name1 = name1;
}
public int getName2() {
return name2;
}
public void setName2(int name2) {
this.name2 = name2;
}
}
결과화면
아두이노에서의 스케치코드(phpoc chip 사용)
// Arduino web client - GET request for index.html or index.php
// This is an example of using Arduino Uno/Mega and PHPoC [WiFi] Shield to make
// an HTTP request to a web server and get web content in response. Web content
// is a HTML file and printed to serial monitor.
#include <Phpoc.h>
// hostname of web server:
char server_name[] = "192.168.43.99";
PhpocClient client;
void setup() {
Serial.begin(9600);
while(!Serial)
;
Serial.println("Sending GET request to web server");
// initialize PHPoC [WiFi] Shield:
Serial.println("쉴드 정보 : ");
Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
// connect to web server on port 80:
Serial.println("접속시작");
if(client.connect(server_name, 9090))
{
Serial.println("접속 성공");
// // make a HTTP request:
client.println("POST /postdata HTTP/1.1");
client.println("Host: 192.168.25.53");
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Content-Length: 19");
client.println("");
client.println("name1=111&name2=222");
//
// client.println("");
// client.println("");
}
else // if not connected:
Serial.println("connection failed");
}
void loop() {
if(client.available())
{
// if there is an incoming byte from the server, read them and print them to
// serial monitor:
char c = client.read();
Serial.print(c);
}
if(!client.connected())
{
// if the server's disconnected, stop the client:
Serial.println("");
Serial.println("disconnected");
client.stop();
// do nothing forevermore:
while(true)
;
}
}
참고, 에러발생
ava.lang.IllegalArgumentException: The HTTP header line [name1=111&name2=222] does not conform to RFC 7230 and has been ignored.
이것처럼 오류 뜨고요ㅜ 이건 엔터 하나 더 치면 해결되는 오류이다.(client.println(""); 추가)
참고
1. https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/POST
2.
3.
'BackEnd > Spring Framework' 카테고리의 다른 글
서버 올리기 (앱단 API 서버) (0) | 2019.04.10 |
---|---|
spring framework #01 스프링프레임워크 개요 (0) | 2019.02.15 |