Perl:如何使用encode_base64处理HTTP响应

Perl:如何使用encode_base64处理HTTP响应,perl,base64,Perl,Base64,我的任务是从HTTP响应生成BASE64字符串,外部程序将使用该字符串。在此之前,我知道如果使用BASE64,字符串的长度将扩展为57*4/3=76 但是如果HTTP响应超过57字节,我不知道需要处理哪一个!所以我并没有任何HTTP响应的特殊句柄,只是直接转换我想要的“$response->content”(实际上响应的长度超过57字节) 3.出乎意料的是编码字符串的长度不完全遵循4/3规则!!!当输入字符串的len为57时,编码字符串的len为77。当输入字符串的len为114时,编码字符串为

我的任务是从HTTP响应生成BASE64字符串,外部程序将使用该字符串。在此之前,我知道如果使用BASE64,字符串的长度将扩展为57*4/3=76

  • 但是如果HTTP响应超过57字节,我不知道需要处理哪一个!所以我并没有任何HTTP响应的特殊句柄,只是直接转换我想要的“$response->content”(实际上响应的长度超过57字节)

  • 3.出乎意料的是编码字符串的长度不完全遵循4/3规则!!!当输入字符串的len为57时,编码字符串的len为77。当输入字符串的len为114时,编码字符串为154,为什么

    4.当我尝试使用来自外部c#arg()的BASE64输出时,它似乎只能接收前57个字节

    #Sample Code
    my $cont = $response->content;
    $cont = substr ($cont, 0, 57);
    my $encode = encode_base64($cont);
    printf("Length Before Decode = %d.\n",length($cont));
    printf("Length After Decode = %d.\n",length($encode));
    #
    

    encode_base64()
    添加换行符。你在计算编码字符串长度中的换行符吗?这似乎是你性格的原因。

    非常感谢你的快速反应!但它会生成一个额外的字节,这是正常的吗?实际上,我想将HTTP响应打印为BASE 64,然后我的外部C#程序可以将其作为Arg()接收,然后执行下一步,是否有任何需要考虑的事项?如果额外的字节确实只是一个换行符,那么您应该安全地将其关闭。另一个需要研究的问题是C#中的Base64解码是否与Perl提供的Base64编码完全匹配。Base64的Wikipedia页面列出了几个变体:抱歉再次打扰。但在我使用“chomp($encode)”之后,它似乎只会影响一行,例如,如果$encode的长度为57,就可以了,chomp($encode)的长度为76,但当$encode的长度超过57时,它只会删除第一行添加的内容。@ke先生:我不确定我是否理解。如果
    encode\u base64
    只在其结果上添加一个额外的换行符,那么
    chomp
    将删除它。我遇到的意外情况是,它不仅添加了一个字节,如果原始字符串是114,那么多添加了两个字节,如果原始字符串是570,那么多添加了十个字节。