CGIÀÇ Ãâ·Â
printf("Content-type: text/html\n"); printf("\n"); |
¹°·Ð ´Ù¸¥ ¾ð¾î·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡µµ °°Àº Äڵ带 °¡Àå ¸ÕÀú Ãâ·ÂÇØÁÖ¸é °°Àº È¿°ú¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. PerlÀÇ °æ¿ì¿¡´Â ´ÙÀ½°ú °°½À´Ï´Ù.
print "Content-type: text/html\n"; print "\n"; |
½ÇÇàµÈ °á°ú, ´Ù½Ã ¸»Çؼ Ãâ·ÂµÇ´Â ³»¿ëÀº web browserÀÎ NetscapeÀ̳ª Mosaic, Explorer, lynxµîÀÌ ¹Þ°Ô µÇ¸é À§¿¡¼ Ãâ·ÂÇß´ø Çì´õ¿¡ µû¶ó¼ ±× ³»¿ëÀ» ´Ù¸£°Ô ÀνÄÇÕ´Ï´Ù. ¿©±â¿¡¼´Â HTML ¹®¼·Î Ãâ·ÂÇϹǷΠ±× ÀÌÈÄÀÇ Ãâ·ÂÀº ¸ðµÎ HTML ¾ð¾î·Î Àνĵǰí HTML¹®¼·Î º¸¿©Áö°Ô µË´Ï´Ù.
printf("Content-type: text/html\n"); printf("\n"); printf("<html>\n"); printf("<head>\n"); printf("<title> Welcome to my homepage! </title>\n"); printf("<body>\n"); . . ¿©±â¿¡ HTML¾ð¾î¸¦ Ãâ·ÂÇØÁÖ¸é µË´Ï´Ù. . printf("<body>\n"); printf("<html>\n"); |
¾Æ¸¶ ´ëÃæ ¾î¶»°Ô Ãâ·ÂÇÏ´ÂÁö ÃæºÐÈ÷ ÀÌÇØÇϼÌÀ» °Å¶ó°í ¹Ï°í ´Ù½Ã ÀԷ¿¡ °üÇÑ À̾߱⸦ ´Ù½Ã ´Ù·ç¾îº¸°Ú½À´Ï´Ù. ÀÌÀü¿¡ ¼³¸íÇß´ø °ÍÀº ÀÔ·ÂÀÇ ´Ù¾çÇÑ Çü½Ä¿¡ °üÇÑ °ÍÀ̾úÀ¸³ª À̹ø¿¡´Â ÀÔ·ÂÀÌ ½ÇÁ¦·Î ¾î¶² ÇüÅ·Πµé¾î¿À°í, ±×°ÍÀ» ¾î¶»°Ô ó¸®ÇØ¾ß ÇÏ´ÂÁö¸¦ ¾Ë¾Æ¾ß ¿Ã¹Ù¸£°Ô ÀÛµ¿ÇÏ´Â CGI programÀ» ÀÛ¼ºÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
 
void getcgiinput(void) { int i = 0, x; do { x = fgetc(stdin); buffer[i++] = x; while (x != EOF); buffer[i] = '\0'; } |
À§ ¿¹Á¦ Äڵ忡¼ »ç¿ëÇÑ buffer´Â ÀÌ ÇÔ¼ö(callee)¸¦ È£ÃâÇÑ ÇÔ¼ö(caller)¿¡¼µµ ÀÐ¾î µéÀÏ ¼ö ÀÖµµ·Ï Àü¿ªº¯¼ö·Î ÁöÁ¤µÇ°Å³ª parameter·Î ³Ñ°Ü¹Þ¾Æ¼ ó¸®ÇØ Á־ µË´Ï´Ù. ÀÌÁ¦ ÀÌ buffer¶ó´Â ¹è¿Àº ¿©·¯ tokenµéÀÌ ´ë°³ &(and)³ª |(or)·Î ±¸ºÐµÇ¾î ¹¿©ÀÖÀ¸¹Ç·Î »ç¿ëÀÚ°¡ Á÷Á¢ token´ÜÀ§·Î ÂÉ°³ÁÖ¾î¾ß ÇÕ´Ï´Ù.
/* ¸ÞÀÎ ÇÔ¼ö¿¡¼ */ token = strtok(buffer, "&"); while (token != NULL) { process_pair(token); token = strtok(NULL, "&"); } /* ²÷¾îÁø ÇÑ token="name_string=value_string"À» name°ú value·Î ÂÉ°³¾î ó¸®ÇÏ´Â ÇÔ¼ö */ void process_pair(char *varval) { char *ptr_value; char name[1024]; char value[1024]; strcpy(name, varval); ptr_value = strchr(name, '='); if (ptr_value != NULL) { *ptr_value++ = '\0'; strcpy(value, ptr_value); urldecode(name); urldecode(value); if (!stricmp(name, "keyword")) strncpy(input, value, sizeof(input)-1); /* ´Ù ³ª´©¾îÁ³À¸´Ï 󸮸¸ ÇØÁÖ¸é µË´Ï´Ù. */ /* ½ÇÁ¦ ÄÚµå´Â °¢ ÇÁ·Î±×·¥¸¶´Ù ´Ù¸£°ÚÁÒ. */ /* nameÀ̶ó´Â º¯¼ö¿¡´Â º¯¼öÀ̸§ÀÌ, */ /* value¶ó´Â º¯¼ö¿¡´Â º¯¼öÀÇ °ªÀÌ */ /* ½ºÆ®¸µ ÇüÅ·ΠÀúÀåµÇ¾îÁ® ÀÖ½À´Ï´Ù. */ . . . } } } /* encodeµÇ¾î µé¾î¿Â ¹®ÀÚµéÀ» decodeÇØÁÖ´Â ÇÔ¼ö */ void urldecode(unsigned char *encoded) { char *decoded; int temp; swapchar(encoded, '+', ' '); decoded = encoded; while (*encoded) { if (*encoded == '%') { encoded++; if (isxdigit(encoded[0]) && isxdigit(encoded[1])) { sscanf(encoded, "%2x", &temp); *decoded++ = (char) temp; encoded += 2; } } else { *decoded++ = *encoded++; } } *decoded = '\0'; } |