산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 웹 프로그래밍

CGI란 무엇입니까?

웹 브라우징

CGI의 개념을 이해하기 위해 하이퍼링크를 클릭하여 특정 웹 페이지나 URL을 탐색할 때 어떤 일이 발생하는지 살펴보겠습니다.

그러나 특정 디렉토리의 파일이 요청될 때마다 해당 파일이 다시 전송되지 않도록 HTTP 서버를 설정할 수 있습니다. 대신 프로그램으로 실행되고 프로그램에서 생성된 출력은 표시하기 위해 브라우저로 다시 전송됩니다.

CGI(Common Gateway Interface)는 응용 프로그램(CGI 프로그램 또는 CGI 스크립트라고 함)이 웹 서버 및 클라이언트와 상호 작용할 수 있도록 하는 표준 프로토콜입니다. 이러한 CGI 프로그램은 Python, PERL, Shell, C 또는 C++ 등으로 작성할 수 있습니다.

CGI 아키텍처 다이어그램

다음의 간단한 프로그램은 CGI의 간단한 구조를 보여줍니다 -

웹 서버 구성

CGI 프로그래밍을 진행하기 전에 웹 서버가 CGI를 지원하고 CGI 프로그램을 처리하도록 구성되어 있는지 확인하십시오. HTTP 서버에서 실행되는 모든 CGI 프로그램은 미리 구성된 디렉토리에 보관됩니다. 이 디렉토리를 CGI 디렉토리라고 하며 규칙에 따라 /var/www/cgi-bin으로 이름이 지정됩니다. 규칙에 따라 CGI 파일의 확장자는 .cgi입니다. , C++ 실행 가능하지만.

기본적으로 Apache Web Server는 /var/www/cgi-bin에서 CGI 프로그램을 실행하도록 구성되어 있습니다. CGI 스크립트를 실행할 다른 디렉토리를 지정하려면 httpd.conf 파일에서 다음 섹션을 수정할 수 있습니다. -

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>
 
<Directory "/var/www/cgi-bin">
   Options All
</Directory>

여기에서는 웹 서버가 성공적으로 실행되고 있으며 Perl이나 Shell 등과 같은 다른 CGI 프로그램을 실행할 수 있다고 가정합니다.

첫 번째 CGI 프로그램

다음 C++ 프로그램 내용을 고려하십시오 -

#include <iostream>
using namespace std;

int main () {
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Hello World - First CGI Program</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<h2>Hello World! This is my first CGI program</h2>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

위의 코드를 컴파일하고 실행 파일의 이름을 cplusplus.cgi로 지정합니다. 이 파일은 /var/www/cgi-bin 디렉토리에 보관 중이며 다음과 같은 내용을 담고 있습니다. CGI 프로그램을 실행하기 전에 chmod 755 cplusplus.cgi를 사용하여 파일 모드를 변경했는지 확인하십시오. 파일을 실행 가능하게 만드는 UNIX 명령입니다.

나의 첫 CGI 프로그램

위의 C++ 프로그램은 화면과 같은 STDOUT 파일에 출력을 쓰는 간단한 프로그램입니다. 첫 번째 줄 인쇄 Content-type:text/html\r\n\r\n라는 중요하고 추가 기능이 있습니다. . 이 줄은 브라우저로 다시 전송되고 브라우저 화면에 표시할 콘텐츠 유형을 지정합니다. 이제 CGI의 기본 개념을 이해하고 Python을 사용하여 많은 복잡한 CGI 프로그램을 작성할 수 있습니다. C++ CGI 프로그램은 RDBMS와 같은 다른 외부 시스템과 상호 작용하여 정보를 교환할 수 있습니다.

HTTP 헤더

Content-type:text/html\r\n\r\n 줄 콘텐츠를 이해하기 위해 브라우저로 전송되는 HTTP 헤더의 일부입니다. 모든 HTTP 헤더는 다음과 같은 형식입니다 -

HTTP Field Name: Field Content
 
For Example
Content-type: text/html\r\n\r\n

CGI 프로그래밍에서 자주 사용할 다른 중요한 HTTP 헤더가 거의 없습니다.

Sr.No 헤더 및 설명
1

콘텐츠 유형:

반환되는 파일의 형식을 정의하는 MIME 문자열입니다. 예는 Content-type:text/html입니다.

2

만료:날짜

정보가 무효화되는 날짜입니다. 브라우저에서 페이지를 새로 고쳐야 하는 시기를 결정하는 데 사용해야 합니다. 유효한 날짜 문자열은 1998년 1월 1일 12:00:00 GMT 형식이어야 합니다.

3

위치:URL

요청된 URL 대신 반환되어야 하는 URL입니다. 이 파일을 사용하여 요청을 모든 파일로 리디렉션할 수 있습니다.

4

최종 수정 날짜:날짜

리소스의 마지막 수정 날짜입니다.

5

콘텐츠 길이:N

반환되는 데이터의 길이(바이트)입니다. 브라우저는 이 값을 사용하여 파일의 예상 다운로드 시간을 보고합니다.

6

쿠키 설정:문자열

문자열을 통해 전달된 쿠키 설정 .

CGI 환경 변수

모든 CGI 프로그램은 다음 환경 변수에 액세스할 수 있습니다. 이러한 변수는 CGI 프로그램을 작성할 때 중요한 역할을 합니다.

Sr.No 변수 이름 및 설명
1

CONTENT_TYPE

클라이언트가 첨부된 콘텐츠를 서버로 보낼 때 사용되는 콘텐츠의 데이터 유형입니다. 예를 들어 파일 업로드 등

2

CONTENT_LENGTH

POST 요청에만 사용할 수 있는 쿼리 정보의 길이입니다.

3

HTTP_COOKIE

키와 값 쌍의 형태로 설정된 쿠키를 반환합니다.

4

HTTP_USER_AGENT

User-Agent request-header 필드는 요청을 시작한 사용자 에이전트에 대한 정보를 포함합니다. 웹 브라우저의 이름입니다.

5

PATH_INFO

CGI 스크립트의 경로입니다.

6

QUERY_STRING

GET 메소드 요청과 함께 전송되는 URL 인코딩 정보입니다.

7

REMOTE_ADDR

요청하는 원격 호스트의 IP 주소입니다. 이는 로깅 또는 인증 목적으로 유용할 수 있습니다.

8

REMOTE_HOST

요청하는 호스트의 완전한 이름입니다. 이 정보를 사용할 수 없는 경우 REMOTE_ADDR을 사용하여 IR 주소를 얻을 수 있습니다.

9

REQUEST_METHOD

요청하는 데 사용되는 메서드입니다. 가장 일반적인 방법은 GET 및 POST입니다.

10

SCRIPT_FILENAME

CGI 스크립트의 전체 경로입니다.

11

SCRIPT_NAME

CGI 스크립트의 이름입니다.

12

SERVER_NAME

서버의 호스트 이름 또는 IP 주소입니다.

13

SERVER_SOFTWARE

서버가 실행 중인 소프트웨어의 이름과 버전입니다.

다음은 모든 CGI 변수를 나열하는 작은 CGI 프로그램입니다.

#include <iostream>
#include <stdlib.h>
using namespace std;

const string ENV[ 24 ] = {
   "COMSPEC", "DOCUMENT_ROOT", "GATEWAY_INTERFACE",   
   "HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING",             
   "HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION",         
   "HTTP_HOST", "HTTP_USER_AGENT", "PATH",            
   "QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",      
   "REQUEST_METHOD", "REQUEST_URI", "SCRIPT_FILENAME",
   "SCRIPT_NAME", "SERVER_ADDR", "SERVER_ADMIN",      
   "SERVER_NAME","SERVER_PORT","SERVER_PROTOCOL",     
   "SERVER_SIGNATURE","SERVER_SOFTWARE" };   

int main () {
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI Environment Variables</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";

   for ( int i = 0; i < 24; i++ ) {
      cout << "<tr><td>" << ENV[ i ] << "</td><td>";
      
      // attempt to retrieve value of environment variable
      char *value = getenv( ENV[ i ].c_str() );  
      if ( value != 0 ) {
         cout << value;                                 
      } else {
         cout << "Environment variable does not exist.";
      }
      cout << "</td></tr>\n";
   }
   
   cout << "</table><\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

C++ CGI 라이브러리

실제 예의 경우 CGI 프로그램으로 많은 작업을 수행해야 합니다. C++ 프로그램용으로 작성된 CGI 라이브러리가 있습니다. 이 라이브러리는 ftp://ftp.gnu.org/gnu/cgicc/에서 다운로드할 수 있으며 라이브러리 설치 단계를 따르십시오 -

$tar xzf cgicc-X.X.X.tar.gz 
$cd cgicc-X.X.X/ 
$./configure --prefix=/usr 
$make
$make install

관련 문서는 'C++ CGI Lib Documentation.

에서 확인하실 수 있습니다.

GET 및 POST 메소드

브라우저에서 웹 서버로, 그리고 궁극적으로 CGI 프로그램으로 일부 정보를 전달해야 하는 상황을 많이 겪었을 것입니다. 대부분의 브라우저는 이 정보를 웹 서버에 전달하기 위해 두 가지 방법을 사용합니다. 이러한 메소드는 GET 메소드와 POST 메소드입니다.

GET 메소드를 사용하여 정보 전달

GET 메서드는 페이지 요청에 추가된 인코딩된 사용자 정보를 보냅니다. 페이지와 인코딩된 정보는 ? 다음과 같은 문자 -

http://www.test.com/cgi-bin/cpp.cgi?key1=value1&key2=value2

GET 방법은 브라우저에서 웹 서버로 정보를 전달하는 기본 방법이며 브라우저의 Location:box에 나타나는 긴 문자열을 생성합니다. 서버에 전달할 암호 또는 기타 민감한 정보가 있는 경우 GET 방법을 사용하지 마십시오. GET 메서드에는 크기 제한이 있으며 요청 문자열에 최대 1024자를 전달할 수 있습니다.

GET 방법을 사용할 때 정보는 QUERY_STRING http 헤더를 사용하여 전달되며 QUERY_STRING 환경 변수를 통해 CGI 프로그램에서 액세스할 수 있습니다.

단순히 키와 값 쌍을 URL과 연결하여 정보를 전달하거나 HTML

태그를 사용하여 GET 메소드를 사용하여 정보를 전달할 수 있습니다.

간단한 URL 예:Get 메소드

다음은 GET 메소드를 사용하여 hello_get.py 프로그램에 두 개의 값을 전달하는 간단한 URL입니다.

/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI

다음은 cpp_get.cgi를 생성하는 프로그램입니다. 웹 브라우저에서 제공한 입력을 처리하는 CGI 프로그램. 전달된 정보에 매우 쉽게 액세스할 수 있도록 하는 C++ CGI 라이브러리를 사용할 것입니다. −

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>  

using namespace std;
using namespace cgicc;

int main () {
   Cgicc formData;
   
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Using GET and POST Methods</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("first_name");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "First name: " << **fi << endl;  
   } else {
      cout << "No text entered for first name" << endl;  
   }
   
   cout << "<br/>\n";
   fi = formData.getElement("last_name");  
   if( !fi->isEmpty() &&fi != (*formData).end()) {  
      cout << "Last name: " << **fi << endl;  
   } else {
      cout << "No text entered for last name" << endl;  
   }
   
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

이제 위의 프로그램을 다음과 같이 컴파일하십시오 -

$g++ -o cpp_get.cgi cpp_get.cpp -lcgicc

cpp_get.cgi를 생성하고 CGI 디렉토리에 넣고 다음 링크를 사용하여 액세스를 시도하십시오 -

/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI

이것은 다음과 같은 결과를 생성합니다 -

First name: ZARA 
Last name: ALI 

간단한 FORM 예제:GET 메소드

다음은 HTML FORM과 submit 버튼을 사용하여 두 개의 값을 전달하는 간단한 예입니다. 이 입력을 처리하기 위해 동일한 CGI 스크립트 cpp_get.cgi를 사용할 것입니다.

<form action = "/cgi-bin/cpp_get.cgi" method = "get">
   First Name: <input type = "text" name = "first_name">  <br />
 
   Last Name: <input type = "text" name = "last_name" />
   <input type = "submit" value = "Submit" />
</form>

다음은 위 양식의 실제 출력입니다. 이름과 성을 입력하고 제출 버튼을 클릭하면 결과를 볼 수 있습니다.

POST 방식으로 정보 전달

일반적으로 CGI 프로그램에 정보를 전달하는 보다 안정적인 방법은 POST 방법입니다. 이것은 GET 메소드와 정확히 같은 방식으로 정보를 패키징하지만, ? URL에서 별도의 메시지로 보냅니다. 이 메시지는 표준 입력의 형태로 CGI 스크립트에 들어옵니다.

동일한 cpp_get.cgi 프로그램이 POST 메서드도 처리합니다. HTML FORM과 submit 버튼을 사용하여 두 개의 값을 전달하지만 이번에는 POST 방식으로 다음과 같이 두 개의 값을 전달하는 위와 같은 예를 들어보겠습니다. -

<form action = "/cgi-bin/cpp_get.cgi" method = "post">
   First Name: <input type = "text" name = "first_name"><br />
   Last Name: <input type = "text" name = "last_name" />
 
   <input type = "submit" value = "Submit" />
</form>

다음은 위 양식의 실제 출력입니다. 이름과 성을 입력하고 제출 버튼을 클릭하면 결과를 볼 수 있습니다.

CGI 프로그램에 체크박스 데이터 전달

확인란은 둘 이상의 옵션을 선택해야 할 때 사용됩니다.

다음은 두 개의 확인란이 있는 양식에 대한 HTML 코드의 예입니다. -

<form action = "/cgi-bin/cpp_checkbox.cgi" method = "POST" target = "_blank">
   <input type = "checkbox" name = "maths" value = "on" /> Maths
   <input type = "checkbox" name = "physics" value = "on" /> Physics
   <input type = "submit" value = "Select Subject" />
</form>

이 코드의 결과는 다음 형식입니다. -

아래는 C++ 프로그램으로 cpp_checkbox.cgi 스크립트를 생성하여 웹 브라우저에서 체크박스 버튼을 통해 입력을 처리합니다.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main () {
   Cgicc formData;
   bool maths_flag, physics_flag;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Checkbox Data to CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   maths_flag = formData.queryCheckbox("maths");
   if( maths_flag ) {  
      cout << "Maths Flag: ON " << endl;  
   } else {
      cout << "Maths Flag: OFF " << endl;  
   }
   cout << "<br/>\n";

   physics_flag = formData.queryCheckbox("physics");
   if( physics_flag ) {  
      cout << "Physics Flag: ON " << endl;  
   } else {
      cout << "Physics Flag: OFF " << endl;  
   }
   
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

CGI 프로그램에 라디오 버튼 데이터 전달

라디오 버튼은 하나의 옵션만 선택해야 할 때 사용됩니다.

다음은 두 개의 라디오 버튼이 있는 양식에 대한 예제 HTML 코드입니다. -

<form action = "/cgi-bin/cpp_radiobutton.cgi" method = "post" target = "_blank">
   <input type = "radio" name = "subject" value = "maths" checked = "checked"/> Maths 
   <input type = "radio" name = "subject" value = "physics" /> Physics
   <input type = "submit" value = "Select Subject" />
</form>

이 코드의 결과는 다음 형식입니다. -

다음은 라디오 버튼을 통해 웹 브라우저에서 제공한 입력을 처리하기 위해 cpp_radiobutton.cgi 스크립트를 생성하는 C++ 프로그램입니다.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main () {
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Radio Button Data to CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("subject");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Radio box selected: " << **fi << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

CGI 프로그램에 텍스트 영역 데이터 전달

TEXTAREA 요소는 여러 줄 텍스트가 CGI 프로그램에 전달되어야 할 때 사용됩니다.

다음은 TEXAREA 상자가 있는 양식의 HTML 코드 예입니다. −

<form action = "/cgi-bin/cpp_textarea.cgi" method = "post" target = "_blank">
   <textarea name = "textcontent" cols = "40" rows = "4">
      Type your text here...
   </textarea>
   <input type = "submit" value = "Submit" />
</form>

이 코드의 결과는 다음 형식입니다. -

아래는 C++ 프로그램으로, 텍스트 영역을 통해 웹 브라우저에서 제공한 입력을 처리하기 위해 cpp_textarea.cgi 스크립트를 생성합니다.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main () {
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Text Area Data to CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("textcontent");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Text Content: " << **fi << endl;  
   } else {
      cout << "No text entered" << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

CGI 프로그램에 드롭다운 상자 데이터 전달

드롭다운 상자는 사용할 수 있는 옵션이 많지만 한두 개만 선택될 때 사용됩니다.

다음은 하나의 드롭다운 상자가 있는 양식에 대한 예제 HTML 코드입니다. -

<form action = "/cgi-bin/cpp_dropdown.cgi" method = "post" target = "_blank">
   <select name = "dropdown">
      <option value = "Maths" selected>Maths</option>
      <option value = "Physics">Physics</option>
   </select>
   
   <input type = "submit" value = "Submit"/>
</form>

이 코드의 결과는 다음 형식입니다. -

아래는 드롭다운 상자를 통해 웹 브라우저에서 제공한 입력을 처리하기 위해 cpp_dropdown.cgi 스크립트를 생성하는 C++ 프로그램입니다.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main () {
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Drop Down Box Data to CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("dropdown");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Value Selected: " << **fi << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

CGI에서 쿠키 사용

HTTP 프로토콜은 상태 비저장 프로토콜입니다. 그러나 상용 웹사이트의 경우 서로 다른 페이지 간에 세션 정보를 유지 관리해야 합니다. 예를 들어 하나의 사용자 등록은 여러 페이지를 완료한 후에 종료됩니다. 그러나 모든 웹 페이지에서 사용자의 세션 정보를 유지하는 방법.

많은 상황에서 쿠키를 사용하는 것은 더 나은 방문자 경험 또는 사이트 통계에 필요한 선호도, 구매, 수수료 및 기타 정보를 기억하고 추적하는 가장 효율적인 방법입니다.

작동 방식

귀하의 서버는 쿠키 형태로 방문자의 브라우저에 일부 데이터를 보냅니다. 브라우저는 쿠키를 수락할 수 있습니다. 그렇다면 방문자의 하드 드라이브에 일반 텍스트 레코드로 저장됩니다. 이제 방문자가 사이트의 다른 페이지에 도착하면 쿠키를 검색할 수 있습니다. 일단 검색되면 서버는 저장된 내용을 알고/기억합니다.

쿠키는 5개의 가변 길이 필드의 일반 텍스트 데이터 레코드입니다. -

  • 만료 − 쿠키가 만료되는 날짜를 보여줍니다. 비어 있으면 방문자가 브라우저를 종료할 때 쿠키가 만료됩니다.

  • 도메인 − 사이트의 도메인 이름을 보여줍니다.

  • 경로 − 쿠키를 설정한 디렉토리 또는 웹페이지의 경로를 보여줍니다. 디렉토리나 페이지에서 쿠키를 검색하려면 공백일 수 있습니다.

  • 보안 − 이 필드에 "보안"이라는 단어가 포함된 경우 쿠키는 보안 서버에서만 검색할 수 있습니다. 이 필드가 비어 있으면 그러한 제한이 없습니다.

  • 이름 =값 − 쿠키는 키와 값 쌍의 형태로 설정 및 검색됩니다.

쿠키 설정

브라우저에 쿠키를 보내는 것은 매우 쉽습니다. 이러한 쿠키는 콘텐츠 유형이 제출되기 전에 HTTP 헤더와 함께 전송됩니다. 사용자 ID와 비밀번호를 쿠키로 설정하고 싶다고 가정합니다. 따라서 쿠키 설정은 다음과 같이 됩니다.

#include <iostream>
using namespace std;

int main () {
   cout << "Set-Cookie:UserID = XYZ;\r\n";
   cout << "Set-Cookie:Password = XYZ123;\r\n";
   cout << "Set-Cookie:Domain = www.tutorialspoint.com;\r\n";
   cout << "Set-Cookie:Path = /perl;\n";
   cout << "Content-type:text/html\r\n\r\n";

   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Cookies in CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   cout << "Setting cookies" << endl;  
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

이 예에서 쿠키를 설정하는 방법을 이해해야 합니다. 세트 쿠키를 사용합니다. 쿠키를 설정하는 HTTP 헤더입니다.

여기서 Expires, Domain 및 Path와 같은 쿠키 속성을 설정하는 것은 선택 사항입니다. 매직 라인 "Content-type:text/html\r\n\r\n을 보내기 전에 쿠키가 설정된다는 점에 유의하십시오. .

위의 프로그램을 컴파일하여 setcookies.cgi를 생성하고 다음 링크를 이용하여 쿠키를 설정해 봅니다. 컴퓨터에 4개의 쿠키를 설정합니다 -

/cgi-bin/setcookies.cgi

쿠키 검색

설정된 모든 쿠키를 쉽게 검색할 수 있습니다. 쿠키는 CGI 환경 변수 HTTP_COOKIE에 저장되며 다음과 같은 형식을 갖습니다.

key1 = value1; key2 = value2; key3 = value3....

다음은 쿠키를 검색하는 방법의 예입니다.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>

using namespace std;
using namespace cgicc;

int main () {
   Cgicc cgi;
   const_cookie_iterator cci;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Cookies in CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";
   
   // get environment variables
   const CgiEnvironment& env = cgi.getEnvironment();

   for( cci = env.getCookieList().begin();
   cci != env.getCookieList().end(); 
   ++cci ) {
      cout << "<tr><td>" << cci->getName() << "</td><td>";
      cout << cci->getValue();                                 
      cout << "</td></tr>\n";
   }
   
   cout << "</table><\n";
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

이제 위의 프로그램을 컴파일하여 getcookies.cgi를 생성하고 컴퓨터에서 사용 가능한 모든 쿠키 목록을 얻으십시오 -

/cgi-bin/getcookies.cgi

이렇게 하면 이전 섹션에서 설정한 4개의 쿠키와 컴퓨터에 설정된 다른 모든 쿠키의 목록이 생성됩니다. −

UserID XYZ 
Password XYZ123 
Domain www.tutorialspoint.com 
Path /perl 

파일 업로드 예

파일을 업로드하려면 HTML 양식에 multipart/form-data로 설정된 enctype 속성이 있어야 합니다. . 파일 유형이 있는 입력 태그는 "찾아보기" 버튼을 생성합니다.

<html>
   <body>
      <form enctype = "multipart/form-data" action = "/cgi-bin/cpp_uploadfile.cgi"
         method = "post">
         <p>File: <input type = "file" name = "userfile" /></p>
         <p><input type = "submit" value = "Upload" /></p>
      </form>
   </body>
</html>

이 코드의 결과는 다음 형식입니다. -

참고 − 위의 예는 사람들이 우리 서버에 파일을 업로드하지 못하도록 의도적으로 비활성화되었습니다. 하지만 서버에서 위의 코드를 시도할 수 있습니다.

다음은 cpp_uploadfile.cpp 스크립트입니다. 파일 업로드 처리 -

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>

using namespace std;
using namespace cgicc;

int main () {
   Cgicc cgi;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>File Upload in CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   // get list of files to be uploaded
   const_file_iterator file = cgi.getFile("userfile");
   if(file != cgi.getFiles().end()) {
      // send data type at cout.
      cout << HTTPContentHeader(file->getDataType());
      // write content at cout.
      file->writeToStream(cout);
   }
   cout << "<File uploaded successfully>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

위의 예는 cout에 내용을 작성하기 위한 것입니다. 스트림이지만 파일 스트림을 열고 업로드된 파일의 내용을 원하는 위치에 파일로 저장할 수 있습니다.

이 튜토리얼을 즐겼기를 바랍니다. 그렇다면 피드백을 보내주십시오.


C 언어

  1. C# 프로그래밍의 네임스페이스
  2. C++ 연산자
  3. C++ 주석
  4. C++ 프로그래밍에서 함수에 배열 전달
  5. C 튜토리얼
  6. C++ 개요
  7. C++ 상수/리터럴
  8. C++의 연산자
  9. C++의 숫자
  10. C++ 참조