right now, I'm learning Perl 6; my first project is to make an HTTP client .. I get an error and I do not understand why
Malformed UTF-8 at line 1 col 45
in method new at main.p6 line 13
in block <unit> at main.p6 line 43
I think it comes from the port variable, but I'm not sure Here is all of my perl6 code:
class Request
{
has $!method;
has $!path;
has $!version;
has @!headers;
has $!socket;
has $.response is rw;
method new(:$method, :$path, :$host, :$port, :$version = "HTTP/1.1")
{
my $socket = IO::Socket::INET.new(:$host, :$port);
return self.bless(:$method, :$path, :$version, :$socket);
}
submethod BUILD(:$!method, :$!path, :$!version, :$!socket){}
method setHeader($name, $value)
{
my %header = name => $name, value => $value;
@!headers.push({%header});
}
method toString
{
my $request = "$!method $!path $!version\r\n";
for @!headers -> %_ {
$request ~= %_{'name'} ~ ": " ~ %_{'value'} ~ "\r\n";
}
$request ~ "\r\n";
}
method send($i = 1)
{
say "Request send!";
$!socket.print($.toString());
say $!socket.recv for 0..$i;
}
}
my $host = "127.0.0.1";
my Int $port = 58002;
my $request = Request.new(:method("GET"), :path("/"), :$host, :$port);
$request.setHeader("host", $host);
$request.setHeader("Accept-Language", "fr");
$request.send(2);
This answer may not be helpful, might be annoying, but I can delete it later today if it was and it's all I've got and I have to run.
I don't know if you understand the error message, but let's cover that first.
Malformed UTF-8 at line 1 col 45
in method new at main.p6 line 13
in block <unit> at main.p6 line 43
This means that during execution of the last line in the message, line 43 of your code, something went wrong:
my $request = Request.new(:method("GET"), :path("/"), :$host, :$port);
The compiler noticed that execution of that last line involved a path that went through another line in your code, line 13:
return self.bless(:$method, :$path, :$version, :$socket);
So that helps better pinpoint the line during execution of which the error occurred.
.bless
is a method call. It's called on self
which refers to the invocant passed to the method which you can assume is an object of the class in which the method call appears, namely the class you're defining Request
.
Your code doesn't specify what class Request
inherits from (using is
) so it inherits from Any
. The bless
for Any
is inherited from Mu
's.
which is this code in the Rakudo compiler:
method bless(*%attrinit) {
nqp::create(self).BUILDALL(Empty, %attrinit);
}
So during execution of that code, Perl 6 attempted to read some UTF8 and encountered an invalid character at col 45 of the very first line of some data it tried to read.
So that's the best I can say about why, without seeing your data.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With