【问题标题】:can escaping ruin my http GET request?转义会破坏我的 http GET 请求吗?
【发布时间】:2015-02-15 09:33:33
【问题描述】:

我尝试触发一个 http GET 请求

应该是这样的:

https://www.my_service.com/myRequest?from=x%3A34.78104114532471+y%3A31.243920719573723&to=x%3A34.77901339530945+y%3A31.242416368424312&

我写了这段代码

            webResource.accept("application/json");

            ClientResponse response = webResource.path("myRequest")
                    .queryParam("from", "x%3A34.78104114532471+y%3A31.243920719573723")
                    .queryParam("to", "x%3A34.77901339530945+y%3A31.242416368424312")
.accept(MediaType.APPLICATION_JSON_TYPE)
                    .get(ClientResponse.class);

            if (response.getStatus() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + response.getStatus());
            }

生成此网址:

https://www.my_service.com/myRequest?from=x%3A34.78104114532471+y%3A31.243920719573723&to=x%3A34.77901339530945+y%3A31.242416368424312&

但这会返回 404 错误。

我已经在浏览器中尝试了这两个网址。 唯一的区别是+ 替换为%2B

+ 对我有效,但 %2B 无效。

我怎样才能使代码不替换 +%2B

【问题讨论】:

    标签: java http url escaping webresource


    【解决方案1】:

    奇怪的是,我不得不用空格替换 +:

       .queryParam("from", "x%3A34.78104114532471 y%3A31.243920719573723")
       .queryParam("to", "x%3A34.77901339530945 y%3A31.242416368424312")
    

    【讨论】:

    • 很有道理,不是吗?您正在使用一个在内部进行必要转义的 API。也许你只是不知道规则---+ 是 URL 中空格的转义字符。
    • 就此而言,我建议您使用普通的: 字符而不是%3A 并在内部也将其转义。会让你的代码更容易看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2019-12-07
    相关资源
    最近更新 更多