1.html中通下面的js完成页面调转:
<script>
window.location.href = "abc.cgi?name1="+name1+"&name2="+name2+"+"&pass1="+pass1+";
</script>
在abc.cgi程序中如何获取页面传递的name1\name2\pass1的值显示在abc.cgi页面
第二种通过<form action="abc.cgi" method="POST">调转到abc.cgi
这种情况如何获取name1\name2\pass1的值并显示在abc.cgi页面
13 个解决方案
#1
通过获取环境变量 query-string 得到"?"后面的字符串,然后你自己解析
对于post的数据,通过获取content-length来得到长度,然后存stdin读取。 也要自己解析
对于post的数据,通过获取content-length来得到长度,然后存stdin读取。 也要自己解析
#2
因为是c语言也的cgi程序,对字符的处理不是很方便,实际上我就是想知道如何解析字符串,这是最难的地方。
希望有代码的实现·楼上的兄弟能否帮帮忙!
希望有代码的实现·楼上的兄弟能否帮帮忙!
#3
嗯,首先你能确定你要的参数名。 并且知道query-string是这种形式:
para1=val1¶2=val2
那么你可以首先将他们拆开:
比如要获取$_GET['action'];
char * query_string = "para1=val1¶2=val2¶3=val3";
int main(){
char * str = (char *)malloc(strlen(query_string)+1);
char * index;
memcpy(str, query_string, strlen(query_string)+1);
int i=0;
char * get[100];
while(NULL != (index = strchr(str, '&' ))){
//printf("%s\n", index);
get[i] = (char *)malloc(index-str + 1);
strncpy(get[i++], str, index - str);
strncpy(str, index + 1, strlen(str)-(index-str) + 1);
}
get[i] = (char*)malloc(strlen(str)+1);
strncpy(get[i++], str, strlen(str)+1);
for(int m=0; m<i; m++){
printf("%s\n", get[m]);
free(get[m]);
}
}
~
这样,就会得到形如:
para1=val1
para2=val2
para3=val3
这样的参数。
然后你strchr 等号。。。。。
然后,你明白了吧?
para1=val1¶2=val2
那么你可以首先将他们拆开:
比如要获取$_GET['action'];
char * query_string = "para1=val1¶2=val2¶3=val3";
int main(){
char * str = (char *)malloc(strlen(query_string)+1);
char * index;
memcpy(str, query_string, strlen(query_string)+1);
int i=0;
char * get[100];
while(NULL != (index = strchr(str, '&' ))){
//printf("%s\n", index);
get[i] = (char *)malloc(index-str + 1);
strncpy(get[i++], str, index - str);
strncpy(str, index + 1, strlen(str)-(index-str) + 1);
}
get[i] = (char*)malloc(strlen(str)+1);
strncpy(get[i++], str, strlen(str)+1);
for(int m=0; m<i; m++){
printf("%s\n", get[m]);
free(get[m]);
}
}
~
这样,就会得到形如:
para1=val1
para2=val2
para3=val3
这样的参数。
然后你strchr 等号。。。。。
然后,你明白了吧?
#4
挺好的!!
我试过了!!
只是针对get方法的,
对于post方法楼上的兄弟能否指点一下!非常感谢!!!
我试过了!!
只是针对get方法的,
对于post方法楼上的兄弟能否指点一下!非常感谢!!!
#5
我用boa 服务器做了一个cgi 的程序不能运行,但是我使用下载文件cgi-2.05中的测试用的cgi程序是可以运行的.
我的boa首页为:index.html
<HTML> <HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<TITLE>LINUX CGI NETwork Remoto Control </TITLE>
</HEAD>
<body bgcolor="#CCFFFF">
<p> </p>
<center>
<TABLE BORDER=0>
<FORM ACTION="/var/www/cgi-bin/start.cgi" METHOD="POST">
<p> <tr> <td> <INPUT TYPE="RADIO" NAME=cb VALUE="1" CHECKED>
<font color="#6600CC" SIZE="6">Motor start </font> </tr> </td>
<tr> <td> <INPUT TYPE="RADIO" NAME=cb VALUE="2">
<font color="#6600CC" SIZE="6">Motor stop </font> </tr> </td> </p>
</TABLE> <BR>
<INPUT TYPE=SUBMIT VALUE="send"> </FORM>
</CENTER>
</BODY> </HTML>
我的cgi程序如下:start.c
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("Content-type:text/html \r\n\r\n");
printf(" <html> <head> <title>LINUX CGI NETwork Remoto Control </title> </head>");
printf(" <p>step motor is running </p>");}
printf(" <p>step motor is stoped </p>");}
printf("\ <html>");
return 0;
}
我通过armv4l-unknown-linux-gcc -o start.cgi start.c 来生成cgi,但是不能运行
我的boa首页为:index.html
<HTML> <HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<TITLE>LINUX CGI NETwork Remoto Control </TITLE>
</HEAD>
<body bgcolor="#CCFFFF">
<p> </p>
<center>
<TABLE BORDER=0>
<FORM ACTION="/var/www/cgi-bin/start.cgi" METHOD="POST">
<p> <tr> <td> <INPUT TYPE="RADIO" NAME=cb VALUE="1" CHECKED>
<font color="#6600CC" SIZE="6">Motor start </font> </tr> </td>
<tr> <td> <INPUT TYPE="RADIO" NAME=cb VALUE="2">
<font color="#6600CC" SIZE="6">Motor stop </font> </tr> </td> </p>
</TABLE> <BR>
<INPUT TYPE=SUBMIT VALUE="send"> </FORM>
</CENTER>
</BODY> </HTML>
我的cgi程序如下:start.c
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("Content-type:text/html \r\n\r\n");
printf(" <html> <head> <title>LINUX CGI NETwork Remoto Control </title> </head>");
printf(" <p>step motor is running </p>");}
printf(" <p>step motor is stoped </p>");}
printf("\ <html>");
return 0;
}
我通过armv4l-unknown-linux-gcc -o start.cgi start.c 来生成cgi,但是不能运行
#6
重点在讨论post方法和get方法如何拆分参数就像“laruence ”说提出的解决方法!
#7
Post的话,应该是首先
获取环境变量content_length;
然后,从stdin中读取相应长度的数据
格式和get的一样
具体怎么样我也没有试过,你可以试试。:)
#8
#include <stdio.h>
#include <stdib.h>
main()
{
int,i,n;
printf (″Content-type:text/plain\n\n″);
n=0;
if(getenv(″CONTENT-LENGTH″))
n=atoi(getenv(CONTENT-LENGTH″));
for (i=0;i<n;i++)
putchar(getchar());
putchar (′\n′);
fflush(stdout);
}
这个例子,简单的把post过来的数据回显给客户端。。
#include <stdib.h>
main()
{
int,i,n;
printf (″Content-type:text/plain\n\n″);
n=0;
if(getenv(″CONTENT-LENGTH″))
n=atoi(getenv(CONTENT-LENGTH″));
for (i=0;i<n;i++)
putchar(getchar());
putchar (′\n′);
fflush(stdout);
}
这个例子,简单的把post过来的数据回显给客户端。。
#9
看看这个 http://dev.csdn.net/article/35/35030.shtm
#10
支持搂主,收藏
#11
"laruence"回答的非常的好,非常感谢!
#12
\r\n\r\n
#13
mark......
#1
通过获取环境变量 query-string 得到"?"后面的字符串,然后你自己解析
对于post的数据,通过获取content-length来得到长度,然后存stdin读取。 也要自己解析
对于post的数据,通过获取content-length来得到长度,然后存stdin读取。 也要自己解析
#2
因为是c语言也的cgi程序,对字符的处理不是很方便,实际上我就是想知道如何解析字符串,这是最难的地方。
希望有代码的实现·楼上的兄弟能否帮帮忙!
希望有代码的实现·楼上的兄弟能否帮帮忙!
#3
嗯,首先你能确定你要的参数名。 并且知道query-string是这种形式:
para1=val1¶2=val2
那么你可以首先将他们拆开:
比如要获取$_GET['action'];
char * query_string = "para1=val1¶2=val2¶3=val3";
int main(){
char * str = (char *)malloc(strlen(query_string)+1);
char * index;
memcpy(str, query_string, strlen(query_string)+1);
int i=0;
char * get[100];
while(NULL != (index = strchr(str, '&' ))){
//printf("%s\n", index);
get[i] = (char *)malloc(index-str + 1);
strncpy(get[i++], str, index - str);
strncpy(str, index + 1, strlen(str)-(index-str) + 1);
}
get[i] = (char*)malloc(strlen(str)+1);
strncpy(get[i++], str, strlen(str)+1);
for(int m=0; m<i; m++){
printf("%s\n", get[m]);
free(get[m]);
}
}
~
这样,就会得到形如:
para1=val1
para2=val2
para3=val3
这样的参数。
然后你strchr 等号。。。。。
然后,你明白了吧?
para1=val1¶2=val2
那么你可以首先将他们拆开:
比如要获取$_GET['action'];
char * query_string = "para1=val1¶2=val2¶3=val3";
int main(){
char * str = (char *)malloc(strlen(query_string)+1);
char * index;
memcpy(str, query_string, strlen(query_string)+1);
int i=0;
char * get[100];
while(NULL != (index = strchr(str, '&' ))){
//printf("%s\n", index);
get[i] = (char *)malloc(index-str + 1);
strncpy(get[i++], str, index - str);
strncpy(str, index + 1, strlen(str)-(index-str) + 1);
}
get[i] = (char*)malloc(strlen(str)+1);
strncpy(get[i++], str, strlen(str)+1);
for(int m=0; m<i; m++){
printf("%s\n", get[m]);
free(get[m]);
}
}
~
这样,就会得到形如:
para1=val1
para2=val2
para3=val3
这样的参数。
然后你strchr 等号。。。。。
然后,你明白了吧?
#4
挺好的!!
我试过了!!
只是针对get方法的,
对于post方法楼上的兄弟能否指点一下!非常感谢!!!
我试过了!!
只是针对get方法的,
对于post方法楼上的兄弟能否指点一下!非常感谢!!!
#5
我用boa 服务器做了一个cgi 的程序不能运行,但是我使用下载文件cgi-2.05中的测试用的cgi程序是可以运行的.
我的boa首页为:index.html
<HTML> <HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<TITLE>LINUX CGI NETwork Remoto Control </TITLE>
</HEAD>
<body bgcolor="#CCFFFF">
<p> </p>
<center>
<TABLE BORDER=0>
<FORM ACTION="/var/www/cgi-bin/start.cgi" METHOD="POST">
<p> <tr> <td> <INPUT TYPE="RADIO" NAME=cb VALUE="1" CHECKED>
<font color="#6600CC" SIZE="6">Motor start </font> </tr> </td>
<tr> <td> <INPUT TYPE="RADIO" NAME=cb VALUE="2">
<font color="#6600CC" SIZE="6">Motor stop </font> </tr> </td> </p>
</TABLE> <BR>
<INPUT TYPE=SUBMIT VALUE="send"> </FORM>
</CENTER>
</BODY> </HTML>
我的cgi程序如下:start.c
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("Content-type:text/html \r\n\r\n");
printf(" <html> <head> <title>LINUX CGI NETwork Remoto Control </title> </head>");
printf(" <p>step motor is running </p>");}
printf(" <p>step motor is stoped </p>");}
printf("\ <html>");
return 0;
}
我通过armv4l-unknown-linux-gcc -o start.cgi start.c 来生成cgi,但是不能运行
我的boa首页为:index.html
<HTML> <HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<TITLE>LINUX CGI NETwork Remoto Control </TITLE>
</HEAD>
<body bgcolor="#CCFFFF">
<p> </p>
<center>
<TABLE BORDER=0>
<FORM ACTION="/var/www/cgi-bin/start.cgi" METHOD="POST">
<p> <tr> <td> <INPUT TYPE="RADIO" NAME=cb VALUE="1" CHECKED>
<font color="#6600CC" SIZE="6">Motor start </font> </tr> </td>
<tr> <td> <INPUT TYPE="RADIO" NAME=cb VALUE="2">
<font color="#6600CC" SIZE="6">Motor stop </font> </tr> </td> </p>
</TABLE> <BR>
<INPUT TYPE=SUBMIT VALUE="send"> </FORM>
</CENTER>
</BODY> </HTML>
我的cgi程序如下:start.c
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("Content-type:text/html \r\n\r\n");
printf(" <html> <head> <title>LINUX CGI NETwork Remoto Control </title> </head>");
printf(" <p>step motor is running </p>");}
printf(" <p>step motor is stoped </p>");}
printf("\ <html>");
return 0;
}
我通过armv4l-unknown-linux-gcc -o start.cgi start.c 来生成cgi,但是不能运行
#6
重点在讨论post方法和get方法如何拆分参数就像“laruence ”说提出的解决方法!
#7
Post的话,应该是首先
获取环境变量content_length;
然后,从stdin中读取相应长度的数据
格式和get的一样
具体怎么样我也没有试过,你可以试试。:)
#8
#include <stdio.h>
#include <stdib.h>
main()
{
int,i,n;
printf (″Content-type:text/plain\n\n″);
n=0;
if(getenv(″CONTENT-LENGTH″))
n=atoi(getenv(CONTENT-LENGTH″));
for (i=0;i<n;i++)
putchar(getchar());
putchar (′\n′);
fflush(stdout);
}
这个例子,简单的把post过来的数据回显给客户端。。
#include <stdib.h>
main()
{
int,i,n;
printf (″Content-type:text/plain\n\n″);
n=0;
if(getenv(″CONTENT-LENGTH″))
n=atoi(getenv(CONTENT-LENGTH″));
for (i=0;i<n;i++)
putchar(getchar());
putchar (′\n′);
fflush(stdout);
}
这个例子,简单的把post过来的数据回显给客户端。。
#9
看看这个 http://dev.csdn.net/article/35/35030.shtm
#10
支持搂主,收藏
#11
"laruence"回答的非常的好,非常感谢!
#12
\r\n\r\n
#13
mark......