Earlier quoted context omitted.
$ curl π.com 400 Bad Request 400 Bad Request cloudflare
What's that all about then? I'd expect curl to deal with either/or curl should especially live with a punycode version. Unless the punycode from the OP is incorrect? From basic online tools, it looks like it simply converts to x.com
$ curl http://π.com -v
* Trying 34.102.136.180:80...
* Connected to π.com (34.102.136.180) port 80 (#0)
> GET / HTTP/1.1
> Host: x.com
> User-Agent: curl/8.1.2
> Accept: */*
>
No https, though. (OpenSSL SSL_connect: Connection reset by peer in connection to x.com:443)