한 걸음 두 걸음

HTTP Methods 본문

BackEnd/Spring Framework

HTTP Methods

언제나 변함없이 2021. 1. 9. 02:17
반응형

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.

반응형