2011-12-16 3 views
0

Je veux faire une requête SQL avec mon Java HttpServer mais il semble que le HttpServer ne reconnaît pas les caractères spéciaux dans le lien que je soumets dans mon navigateur:Comment puis-je faire en sorte que HttpServer reconnaisse les caractères spéciaux en Java?

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

Je reçois toujours cette réponse:

400 Bad Request 
URISyntaxException thrown 

C'est le code de mon serveur:

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(); 
     } 
    } 
} 

Comment puis-je résoudre ce problème?

+2

Vous voudrez probablement urlencode votre lien, car il contient des espaces et d'autres symboles. voir http://en.wikipedia.org/wiki/Percent-encoding – clamp

Répondre

4

Vous ne devez jamais transmettre votre requête SQL dans votre URL.

+0

+1, ne peut pas trop insister sur ce point. – Perception

+0

On peut lire http://en.wikipedia.org/wiki/SQL_injection pour obtenir la raison. – Vadzim

5

Oui, certains caractères ne sont pas valides dans certaines parties d'un URL. (en plus du fait que j'espère que vous êtes juste en train de tester ceci et que vous ne l'utilisez pas pour quelque chose de réel, des attaques par injection sql et), vous devez utiliser URLEncoder pour encoder la requête SQL en premier.

+0

je n'ai pas foud comment puis-je intégrer le URLEncoder et le décodeur avec le serveur HTTPS est là un exemple? –

+0

@NabilCHOUAIEB - vous devez simplement encoder la requête sur le client et urldecoder la requête dans le serveur. quelle partie ne fonctionne pas? – jtahlborn

+0

la partie serveur n'est pas en cours d'exécution, je veux que le client soit capable de publier l'URL comme ceci http: // localhost: 8001/test? Query = SELECT * WHERE {? S rdf: type? O. } simplement sur son navigateur, et le serveur doit être capable de reconnaître tous les caractères ont la demande et de poster la réponse que dois-je faire exactement? –

Questions connexes