定义和用法
method 属性规定如何发送表单数据(表单数据发送到 action 属性所规定的页面)。
表单数据可以作为 URL 变量(method=”get”)或者 HTTP post (method=”post”)的方式来发送。
method 属性
- 浏览器使用 method 属性设置的方法将表单中的数据传送给服务器进行处理。
- 共有两种方法:POST 方法和 GET 方法。
1
如果采用 POST 方法,浏览器将会按照下面两步来发送数据。首先,浏览器将与 action 属性中指定的表单处理服务器建立联系,一旦建立连接之后,浏览器就会按分段传输的方法将数据发送给服务器。
在服务器端,一旦 POST 样式的应用程序开始执行时,就应该从一个标志位置读取参数,而一旦读到参数,在应用程序能够使用这些表单值以前,必须对这些参数进行解码。用户特定的服务器会明确指定应用程序应该如何接受这些参数。
2
另一种情况是采用 GET 方法,这时浏览器会与表单处理服务器建立连接,然后直接在一个传输步骤中发送所有的表单数据:浏览器会将数据直接附在表单的 action URL 之后。这两者之间用问号进行分隔。
3
一般浏览器通过上述任何一种方法都可以传输表单信息,而有些服务器只接受其中一种方法提供的数据。可以在 标签的 method (方法)属性中指明表单处理服务器要用方法来处理数据,使 POST 还是 GET。
具体请参考W3C-HTML
POST与GET的url的不同
-
- POST
<html>
<body>
<form action="/example/html/form_action.asp" method="post" target="_blank">
First name: <input type="text" name="fname" /><br />
Last name: <input type="text" name="lname" /><br />
<input type="submit" value="Submit" />
</form>
<p>请单击确认按钮,输入会发送到服务器上名为 "form_action.asp" 的页面。</p>
</body>
</html>
点击Submit按钮之后会生成一个url
//http://www.w3school.com.cn/example/html/form_action.asp
-
- GET
<html>
<body>
<form action="/example/html/form_action.asp" method="post" target="_blank">
First name: <input type="text" name="fname" /><br />
Last name: <input type="text" name="lname" /><br />
<input type="submit" value="Submit" />
</form>
<p>请单击确认按钮,输入会发送到服务器上名为 "form_action.asp" 的页面。</p>
</body>
</html>
//点击Submit按钮之后会生成一个url
http://www.w3school.com.cn/example/html/form_action.asp?fname=pop&lname=123456
处理程序
- 下面的程序完成了兼容GET与POST方式的数据处理
- 最后形成的字符串格式为
name1=value1&name2=value2&name3=value3 ...... namei=valuei ...... namen=valuen
//当value为空时,value被填空
实例:
chn1=&chn2=2&chn3=3&chn4=&chn5=5&chn6=
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char* get_cgi_data(FILE* fp, char* method)
{
char* input;
int len;
int size=1024;
int i=0;
if (strcmp(method, "GET") == 0) /**< GET method */
{
input = getenv("QUERY_STRING");
return input;
}
else if (strcmp(method, "POST") == 0) /**< POST method */
{
len = atoi(getenv("CONTENT_LENGTH"));
printf("size:-%d-\n",len);
input = (char*)malloc(sizeof(char) * (size+1));
if (len == 0)
{
input[0] = '\0';
return input;
}
while (1)
{
input[i] = (char)fgetc(fp);
//printf("-%c-\n",input[i]);
if (i == size)
{
printf("1");
input[i+1] = '\0';
return input;
}
--len;
if (feof(fp) || (!(len)))
{
i++;
printf("2");
input[i] = '\0';
return input;
}
i++;
}
}
return NULL;
}
int main(void)
{
char * type;
char * method;
char * input;
printf("Content-type:text/html\n\n");
type = getenv("CONTENT_TYPE");
printf("<p>type : %s</p>",type);
method = getenv("REQUEST_METHOD");
printf("<p>method : %s</p>", method);
input = get_cgi_data(stdin, method);
printf("<p>input : %s</p>", input);
return 0;
}
/*
gcc test.c -o test
*/
前台
<!DOCTYPE html>
<html>
<body>
<form action="/test" method="GET">
Name:
<br>
<input type="text" name="name" value="Mickey">
<br>
Passwd:
<br>
<input type="text" name="passwd" value="123456">
<br>
<br>
<input type="submit" value="Submit">
</form>
</body>
</html>