Как я могу заставить HttpServer распознавать специальные символы в Java? - PullRequest
0 голосов
/ 16 декабря 2011

Я хочу сделать SQL-запрос с моим Java HttpServer, но кажется, что 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();
        }
    }
}

Как я могу это исправить?

Ответы [ 2 ]

5 голосов
/ 16 декабря 2011

да, есть определенные символы, которые недопустимы в определенных частях URL.( помимо того факта, что я надеюсь, что вы просто тестируете это и фактически не используете его для каких-либо реальных атак SQL-инъекций и всего этого ), вам необходимо использовать URLEncoder для кодирования SQL-запроса первым.

4 голосов
/ 16 декабря 2011

Вы никогда не должны передавать SQL-запрос в свой URL.

...