【发布时间】:2014-05-01 02:32:05
【问题描述】:
我有一个简单的 Perl,它使用 LWP::UserAgent 连接到 HTTPS 并解码 JSON 结果:
my $self = shift;
my $text = shift;
my $ua = new LWP::UserAgent;
my $response = $ua -> get ($self -> getReqLink($text));
$response = parse_json($response -> decoded_content);
return decode('utf-8', $response -> {text} -> [0]);
如果我运行 Perl 脚本,它可以正常工作。 我用pp打包:
pp -c -o maker.exe maker.pl
如果我运行 maker.exe,我会得到错误:
JSON error at line 1, byte 1/170: Unexpected character 'S' parsing initial state: expecting whitespace: '\n', '\r', '\t', ' ' or start of an array or object: '{', '[' at Translation/YandexTranslator.pm line 30.
怎么了?
【问题讨论】:
-
这里的主要问题可能是:为什么这样的解决方案需要联系 Yandex 进行任何翻译? AFAIK Yandex 类似于谷歌和谷歌翻译,但使用俄语。愚蠢的建议,但是您是否尝试过“分而治之”,即删除对每个模块的调用以查看导致问题的模块? (避免 JSON,避免 LWP::UserAgent 等)
-
@FtLie Yandex 有免费的翻译 API,谷歌没有。我认为问题在于 SSL 连接,PAR 没有打包 SSL 证书。但是如果我手动添加 Mozilla/CA/cacert.pem 就不行了。
-
如果在构造$ua之后添加
$ua->ssl_opts( verify_hostname=> 0);行会发生什么?这将避免 SSL 验证。也许不是一个安全的解决方案,但可以证明这是否真的是您的问题。 -
另外,您是否使用严格、警告、诊断?如果没有,也许当你解压运行时问题已经存在,只是什么也没说......