gsoap 처리 http post 와 http get

HTML 페이지 의 작성 방법 은 사용자 의 수요 에 따라 POST 를 사용 하 시 겠 습 니까?GET 를 사용 하 시 겠 습 니까?form 폼 의 mothd 에 post 또는 get 을 할당 합 니 다.
post:<form action="calc" method="post" name="Calc">
get:<form action="calc" method="get" name="Calc">

http_post,http_get 플러그 인 함수 gsoap 자체 post 와 get 플러그 인,경로:gsoap-2.8/gsoap/plugin/htppost.c httpget.c 
두 파일 에서 두 가지 중요 한 함 수 를 정 의 했 습 니 다.httppost,http_get 이 두 함 수 는 플러그 인 으로 호출 되 는 데 사 용 됩 니 다.
gsoap 의 주 함수 에서 다음 과 같은 방법 으로 호출 합 니 다.
/* Register HTTP GET plugin */
  if (soap_register_plugin_arg(&soap, http_get, (void*)http_get_handler))
    soap_print_fault(&soap, stderr);
  /* Register HTTP POST plugin */
  if (soap_register_plugin_arg(&soap, http_form, (void*)http_form_handler))
    soap_print_fault(&soap, stderr);

플러그 인의 역할 은 사용자 의 요청 이 POST 일 때 http 를 자동 으로 호출 하 는 것 입 니 다.form_handler,그렇지 않 으 면 http 호출get_handler
http_get_handler 와 httpform_handler 해석 요청 함수 중(void*)httpget_handler 와(void*)httpform_handler 는 사용자 정의 함수 가 필요 합 니 다.
int http_get_handler(struct soap*); /* HTTP get handler */
int http_form_handler(struct soap*);    /* HTTP form handler */

이 두 함수 에서 사용자 의 요청 을 분석 해 야 합 니 다.사용자 가 요청 한 경로 가 무엇 입 니까?그 중에서 soap->path 는 경로 입 니 다.다음 코드 입 니 다.
  
if (!strcmp(soap->path, "/calc")) 
        return calcget(soap );

경로 가"/calc"이면 calcget 함수 처리 요청 을 호출 합 니 다.
위의 함수 calcget(soap)과 같은 처리 요청 함수
함수 가 httpform_handler 호출 은 함수 에서 form(soap)함수 로 사용자 요청 의 인 자 를 분석 해 야 합 니 다.
함수 가 httpget_handler 호출 은 함수 에서 query(soap)함 수 를 사용 하여 사용자 요청 의 인 자 를 분석 해 야 합 니 다.
실례:
int calcpost(struct soap *soap)
{ int o = 0, a = 0, b = 0, val;
  char buf[256];
  char *s = form(soap); /* get form data from body */
  while (s)
  { char *key = query_key(soap, &s); /* decode next key */
    char *val = query_val(soap, &s); /* decode next value (if any) */
   
    if (key && val)
    { if (!strcmp(key, "o"))
        o = val[0];
      else if (!strcmp(key, "a"))
        a = strtol(val, NULL, 10);
      else if (!strcmp(key, "b"))
        b = strtol(val, NULL, 10);
    }
  }
  switch (o)
  { case 'a':
      val = a + b;
      break;
    case 's':
      val = a - b;
      break;
    case 'm':
      val = a * b;
      break;
    case 'd':
      val = a / b;
      break;
    default:
      return soap_sender_fault(soap, "Unknown operation", NULL);
  }
  soap_response(soap, SOAP_HTML);
  sprintf(buf, "<html>value=%d</html>", val);
  soap_send(soap, buf);
  soap_end_send(soap);
  return SOAP_OK;
}

좋은 웹페이지 즐겨찾기