Perl CGI混合URL与Body参数无法获取URL参数问题咨询
Perl CGI POST请求混合URL参数的处理问题
当POST请求同时携带URL查询参数和表单Body参数时,默认情况下CGI->param()只会解析Body中的POST参数,URL里的参数无法通过这个方法获取——这是CGI.pm的默认行为,并非不支持混合传参方式。
解决方法:
方法1:用
url_param()单独获取URL参数
URL中的查询参数属于GET范畴,需要用url_param()方法提取,Body参数仍用param()获取:my $q = CGI->new(); my $method = $q->request_method(); my $p1 = $q->url_param("p1"); # 获取URL里的p1参数 my $p2 = $q->param("p2"); # 获取POST Body中的p2参数方法2:初始化CGI对象时开启参数合并
如果希望统一用param()获取所有参数(URL+Body),可以在创建CGI对象时添加-merge => 1选项,两种参数会被合并到同一参数池。注意:若URL和Body存在同名参数,POST侧的参数会覆盖URL中的参数:my $q = CGI->new(-merge => 1); # 开启GET与POST参数合并 my $method = $q->request_method(); my $p1 = $q->param("p1"); # 可直接拿到URL中的p1 my $p2 = $q->param("p2"); # 正常获取POST的p2
补充说明
浏览器确实会在POST请求中发送URL查询参数,只是CGI.pm默认将GET、POST参数分开处理,以此避免潜在的参数冲突问题,根据业务需求选择对应处理方式即可。
内容的提问来源于stack exchange,提问作者chris01
相关产品推荐
相关产品推荐

