HTTP POST将@转换为%40

时间:2013-12-27 05:40:25

标签: java httpclient

URI uri = new  URIBuilder()
            .setScheme("https")
            .setHost("1.1.1.1")
            .setPath("/cgi-bin/login")
            .setParameter("username", name)
            .build();
...
CloseableHttpResponse response = httpclient.execute(httppost);

“名称”将是电子邮件地址。当HTTP发布时,符号@将被转换为“%40”。有什么问题?

感谢。

1 个答案:

答案 0 :(得分:1)

我认为这是Apache HTTP客户端库的一个错误。 URI specification表示URI查询中的字符@完全有效且不需要编码。

如果您愿意分支到另一个库,可以使用Spring Web UriComponentsUriComponentsBuilder

UriComponents components = UriComponentsBuilder.newInstance()
                            .scheme("https")
                            .host("1.1.1.1")
                            .path("/cgi-bin/login")
                            .queryParam("name", "test@email.com").build();
URI uri = components.toUri();
System.out.println(uri);

打印

https://1.1.1.1/cgi-bin/login?name=test@email.com

Spring,在这里,允许URI类在其构造函数中执行自己的编码。