Perl技术问题:为何用<>赋值变量时POST请求失效,直接赋值正常?
解决Perl脚本中用户输入导致POST请求400错误的问题
我之前也踩过一模一样的坑!问题根源其实很简单:你用<>读取用户输入时,变量里会偷偷带上换行符,而直接赋值的变量是没有这个多余字符的——服务器收到带换行的参数,自然会返回400 Bad Request,毕竟它没法识别格式异常的连接名称。
具体原因拆解
Perl里用<>(或者<STDIN>)读取输入时,会把用户按下的回车键也一并读入,也就是$connection_name的末尾会多一个\n换行符。比如你输入MyDBConnection,实际变量值是MyDBConnection\n,而直接赋值时是干净的MyDBConnection,这两者在POST请求里是完全不同的参数,服务器校验不通过就会返回错误。
一步解决:用chomp()去掉换行符
只需要在读取输入后,对变量调用chomp()函数,它会自动剔除字符串末尾的换行符和回车符。
给你举个对比示例:
# 错误写法(带换行,导致POST失败) print "请输入连接名称:"; my $connection_name = <>; # 正确写法(清理换行符,请求恢复正常) print "请输入连接名称:"; my $connection_name = <>; chomp($connection_name);
快速验证方法
你可以加一行调试代码,看看变量的真实内容:
print "连接名称的实际值:'$connection_name'\n";
如果没处理换行符,输出会是这样(能看到明显的换行):
连接名称的实际值:'MyDBConnection '
处理后就会变成干净的:
连接名称的实际值:'MyDBConnection'
把换行符清理掉后,POST请求的参数就和直接赋值时完全一致了,服务器就能正常处理你的请求啦!
内容的提问来源于stack exchange,提问作者Jabe Hickey
相关产品推荐
相关产品推荐

