【问题标题】:PAR::Packer and HTTPS in LWP::UserAgentLWP::UserAgent 中的 PAR::Packer 和 HTTPS
【发布时间】: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 验证。也许不是一个安全的解决方案,但可以证明这是否真的是您的问题。
  • 另外,您是否使用严格、警告、诊断?如果没有,也许当你解压运行时问题已经存在,只是什么也没说......

标签: json perl ssl


【解决方案1】:
  1. 在运行 PP 时始终使用-x。它将添加运行时依赖项并为您生成更可靠的可执行文件。根据我的经验,此选项可以修复许多神秘错误。
  2. 在代码顶部添加use warnings 和use strict。看看是否有任何潜在问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2011-09-24
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多