Curl 工作正常但 Perl LWP 无法 post Unicode 代码到 HTTPS 服务器
Curl works fine but Perl LWP failed to post Unicode code to HTTPS server
我的代码如下,使用 curl 我可以将 Unicode 字符串发送到服务器
并在将消息推送到我的手机 phone 后,在 phone 上正确显示汉字。
curl "https://oapi.dingtalk.com/robot/send?access_token=$ACCESS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {
"content": "\u6d4b\u8bd5",
}}'
但是当我使用 Perl LWP 库向服务器发送相同的内容时,
我只在应用程序上显示了 6d4b8bd5。
我尝试使用 tcpdump 来比较 curl 和 LWP 发送缓冲区之间的区别,但是因为它是 https 服务器,所以它不起作用。
#!/usr/bin/perl -w
use strict;
use warnings;
use Cpanel::JSON::XS qw( encode_json );
# Create a user agent object
use LWP::UserAgent;
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
my $ua = LWP::UserAgent->new;
$ua->agent("curl/7.47.0");
# Create a request
my $req = HTTP::Request->new(POST => 'https://oapi.dingtalk.com/robot/send?access_token=bf47148ea6a1b125395f9313873ac508');
$req->content_type('application/json;charset=utf-8');
my $var='\u6d4b\u8bd5';
my $message = encode_json({ msgtype => "text", text => { content => $var } });
$req->content($message);
# Pass request to the user agent and get a response back
my $res = $ua->request($req);
# Check the outcome of the response
if ($res->is_success) {
print $res->content;
} else {
print $res->status_line, "n";
}
有什么建议吗?谢谢!
早些时候,你没有编码。现在,你双重编码。 encode_json
已经在处理 JSON 的编码,因此也不要手动进行!
如果您提供 12 个字符 \u6d4b\u8bd5
,它将收到 12 个字符 \u6d4b\u8bd5
。
如果您提供U+6D4B和U+8BD5这两个字符,它将收到U+6D4B和U+8BD5这两个字符。
my $var = chr(0x6D4B) . chr(0x8BD5);
my $var = "\x{6D4B}\x{8BD5}";
my $var = "\N{U+6D4B}\N{U+8BD5}";
use utf8; my $var = "测试";
- 等等
我的代码如下,使用 curl 我可以将 Unicode 字符串发送到服务器 并在将消息推送到我的手机 phone 后,在 phone 上正确显示汉字。
curl "https://oapi.dingtalk.com/robot/send?access_token=$ACCESS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {
"content": "\u6d4b\u8bd5",
}}'
但是当我使用 Perl LWP 库向服务器发送相同的内容时, 我只在应用程序上显示了 6d4b8bd5。 我尝试使用 tcpdump 来比较 curl 和 LWP 发送缓冲区之间的区别,但是因为它是 https 服务器,所以它不起作用。
#!/usr/bin/perl -w
use strict;
use warnings;
use Cpanel::JSON::XS qw( encode_json );
# Create a user agent object
use LWP::UserAgent;
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
my $ua = LWP::UserAgent->new;
$ua->agent("curl/7.47.0");
# Create a request
my $req = HTTP::Request->new(POST => 'https://oapi.dingtalk.com/robot/send?access_token=bf47148ea6a1b125395f9313873ac508');
$req->content_type('application/json;charset=utf-8');
my $var='\u6d4b\u8bd5';
my $message = encode_json({ msgtype => "text", text => { content => $var } });
$req->content($message);
# Pass request to the user agent and get a response back
my $res = $ua->request($req);
# Check the outcome of the response
if ($res->is_success) {
print $res->content;
} else {
print $res->status_line, "n";
}
有什么建议吗?谢谢!
早些时候,你没有编码。现在,你双重编码。 encode_json
已经在处理 JSON 的编码,因此也不要手动进行!
如果您提供 12 个字符 \u6d4b\u8bd5
,它将收到 12 个字符 \u6d4b\u8bd5
。
如果您提供U+6D4B和U+8BD5这两个字符,它将收到U+6D4B和U+8BD5这两个字符。
my $var = chr(0x6D4B) . chr(0x8BD5);
my $var = "\x{6D4B}\x{8BD5}";
my $var = "\N{U+6D4B}\N{U+8BD5}";
use utf8; my $var = "测试";
- 等等