【问题标题】:How can I make HttpServer recognise special characters in Java?如何让 HttpServer 识别 Java 中的特殊字符?
【发布时间】:2011-12-16 13:04:37
【问题描述】:

我想用我的 Java HttpServer 进行一些 SQL 查询,但 HttpServer 似乎无法识别我提交到浏览器的链接中的特殊字符:

[1]: http://localhost:8001/test?query=SELECT * WHERE{ ?s rdf:type ?o. }

我总是收到这样的回复:

400 Bad Request
URISyntaxException thrown

这是我的服务器的代码:

public class SimpleHttpServer 
{

public static void main(String[] args) throws Exception 
{

        dir = args[0];
        HttpServer server = HttpServer.create(new InetSocketAddress(8001), 0);
        server.createContext("/test", new MyHandler());
        server.setExecutor(null);
        server.start();
    }

    static class MyHandler implements HttpHandler {
        public void handle(HttpExchange t) throws IOException {
            String response ;
            System.out.println(t.getRequestURI().getQuery().toString().replaceAll("query=",   ""));
            response =   ExecuteHttpQuery.getInstance().httpQuery(t.getRequestURI().getQuery().toString().replaceAll("query=", "").toString(), dir) + "\n";
            t.sendResponseHeaders(200, response.length());
            OutputStream os = t.getResponseBody();
            os.write(response.getBytes());
            os.close();
        }
    }
}

我该如何解决这个问题?

【问题讨论】:

标签: java httpserver simplehttpserver


【解决方案1】:

你不应该在你的 URL 中传递你的 SQL 查询。

【讨论】:

    【解决方案2】:

    是的,某些字符在 url 的某些部分是无效的。 (除了我希望你只是在测试它而不是实际将它用于任何真实的东西,sql 注入攻击和所有),你需要先使用 URLEncoder 来编码 sql 查询。

    【讨论】:

    • 我还没有找到如何将 URLEncoder 和 Decoder 与 HTTPServer 集成,有什么例子吗?
    • @NabilCHOUAIEB - 您只需在客户端对查询进行 url 编码,然后在服务器中对查询进行 urldecode。哪个部分不工作?
    • 服务器部分没有运行,我希望客户端能够发布这样的 URL localhost:8001/test?query=SELECT * WHERE{ ?s rdf:type ?o. } 只需在他的浏览器上,服务器必须能够识别所有有请求的字符并回发响应我该怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多