세로형
Recent Posts
Recent Comments
Link
12-25 01:01
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

펄 cgi get, post 진행해보기 본문

perl

펄 cgi get, post 진행해보기

이수진의 블로그 2017. 10. 19. 10:21
반응형
728x170

오늘은 펄로 get, post 방식을 진행해보려 합니다.

일종의 cgi 프로그래밍이죠?

뭐 어떻게 보면 이미 제가 써놨던 웹과 관련된 것들이 cgi를 이용했다고 볼 수도 있어요

 

그 예제들은 값을 전달하는게 아닌, 단순히 출력과 이벤트를 위주로 했었습니다.

오늘은 get, post 방식으로 값을 전달해보려 해요

get, post는 웹에서 값을 전달해주는 방식이죠?

get방식은 url에 값이 나오고, post는 나오지 않고 등등 이런 차이가 있습니다.

이번에 할 것은 아래와 같습니다~

 

 

 

이런식으로 출력이 되게 합니다~

 

이것을 위해 C 드라이브에 있는 Apache에 파일을 나누었어요

 

 

위에는 perl 디렉토리구요

 

 

위는 cgi-bin이라는 폴더입니다.

 

그리고 http.conf 파일 설정도 조금 바뀌었어요!

 

 

이 내용이 추가 되었습니다.

그리고 아래 사진과 같이

서버 루트도 바꾸었습니다

 

자 이제 해볼까요

먼저 소스입니다~

 

GET부터 할게요!

입력하는 perl 파일과 출력하는 파일이 나누어져 있어요

먼저 입력하는 파일입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!C:\Perl64\bin\perl.exe
print "Content-type: text/html \n\n";
print "<html>";
print     "<body>";
print("<FORM action = \"/cgi-bin/hello_get.pl\" 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> ");
 
 
print("        </body>");
print("</html>");
print("<script> \n");
print("var btn = document.getElementById('btn'); \n");
 
print("btn.onclick = function() {  document.getElementById('hide').style.display = 'none';  } \n");
print("</script>");
 
cs

 

GET 방식에서 입력하는 폼입니다.

method가 GET으로 되어 있죠?

그리고 action에 /cgi-bin/디렉토리에 hello_get.pl 파일을 타겟으로 진행됩니다.

 

저 hello_get.pl이 원래는 hello_get.cgi 였는데 저는 이상하게 cgi 파일로 하니까 안되더라고요

그래서 혹시나 하는 마음으로 .pl 확장자로 바꾸어서 했는데 되긴 됩니다.

이 부분은 정확하지 않다는 점 양해부탁드립니다.

 

그리고 hello_get.pl 파일입니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
local ($buffer, @pairs, $pair$name$value, %FORM);
 
$ENV{'REQUEST_METHOD'=~ tr/a-z/A-Z/;
 
if ($ENV{'REQUEST_METHOD'} eq "GET") {
   $buffer = $ENV{'QUERY_STRING'};
}
 
 
@pairs = split(/&/$buffer);
 
foreach $pair (@pairs) {
   ($name$value= split(/=/$pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name= $value;
}
 
$first_name = $FORM{first_name};
$last_name  = $FORM{last_name};
 
print "Content-type:text/html \n\n";
print "<html> \n";
print "<body> \n";
print "<h2>Hello $first_name $last_name </h2>\n";
print "</body> \n";
print "</html>";
cs

 

앞에서 보낸 값들을 자르고, 추출해서 필요한 것만 추출합니다.

그리고 출력해주죠

 

 

자 이제 post 방식입니다!

 

post도 마찬가지로 입력, 출력 해주는 파일이 따로 있습니다.

먼저 post 입력하는 파일입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
 
print "Content-type: text/html \n\n";
print "<html>";
print     "<body>";
print("<FORM action=\"/cgi-bin/Study_10_17_2.pl\" 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>");
 
 
print("        </body>");
print("</html>");
print("<script> \n");
print("var btn = document.getElementById('btn'); \n");
 
print("btn.onclick = function() {  document.getElementById('hide').style.display = 'none';  } \n");
print("</script>");
 
cs

 

method가 POST로 바뀌었죠?

그리고  받는 파일 action도 달라졌습니다.

action과 연결된 파일은 아래와 같습니다! 출력하는 파일이에요

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
local ($buffer, @pairs, $pair$name$value, %FORM);
 
$ENV{'REQUEST_METHOD'=~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST")
{
   read(STDIN, $buffer$ENV{'CONTENT_LENGTH'});
}else {
   $buffer = $ENV{'QUERY_STRING'};
}
 
@pairs = split(/&/$buffer);
foreach $pair (@pairs)
{
   ($name$value= split(/=/$pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name= $value;
}
$first_name = $FORM{first_name};
$last_name  = $FORM{last_name};
 
print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<body>";
print "<h2>Hello $first_name $last_name - CGI Post </h2>";
print "</body>";
print "</html>";
 
 
cs

 

GET과 유사하죠?

이렇게 하면 저 위 사진과 같이 값이 넘어오게 됩니다~

오늘의 정리는 여기까지!

 

 

반응형
그리드형
Comments