2008-10-28 4 views
4

J'ai une URL longue avec des tonnes de paramètres que je veux ouvrir dans le navigateur par défaut de Java sur un système Windows en utilisantLimite de longueur d'URL pour "rundll32 url.dll, FileProtocolHandler"?

Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+url) 

Pour les URL courtes comme « http://www.google.com » cela fonctionne très bien. Mais pour les longues URL (disons 2000 caractères), cela ne fait absolument rien du tout: pas d'exception ou quoi que ce soit du genre, il est simplement ignoré.

Y a-t-il une limite de caractères a) pour une commande Runtime.exec ou b) pour la commande rundll32 url.dll? Si oui, quelle est la limite?

Répondre

1

Vous exécuterez contre this système d'exploitation/navigateur problème spécifique de longueur d'URL maximale:

Pour "rundll32 url.dll" (ie Microsoft IE), vous serez limité à 2083 caractères (y compris http: //).

D'où je vous suis assis avons deux possibilités:

  1. Construction (ou utiliser) un service de style TinyURL qui transforme vos longues urls en courtes, les redirigés. Cependant, même ici, vous allez rencontrer le problème de longueur d'URL , juste dans le navigateur lui-même plutôt que votre Runtime() instruction. par exemple. La fenêtre du navigateur s'ouvre, accédez à l'URL courte qui redirige vers l'URL longue et échoue.

  2. Utilisez une requête POST et enterrez certains ou tous vos paramètres d'URL dans il. Plutôt que d'utiliser un appel GET, vous pouvez fournir des paramètres très longs dans le corps d'une requête HTTP POST. Ce ne serait pas aussi simple que votre exemple de code. En fait, ce peut-être assez difficile (voire impossible) avec la combinaison rundll32 URL.DLL (je ne suis pas familier avec elle) ...

0

Il dépendra également de la version de Windows, parce que vous pouvez outrepasserait la longueur MAX_PATH du système d'exploitation sur la ligne de commande?

0

Vous pouvez également essayer la version Runtime.exec (String []), ce qui vous convient peut-être mieux. Il suffit de prendre tous vos arguments espace et séparés les passer dans les chaînes comme séparées:

Runtime.getRuntime().exec(new String [] {"rundll32", "url.dll,FileProtocolHandler", "urlarg1", "urlarg2"});

1

En aparté, je suggère d'utiliser la plate-forme croisée Desktop.open() ou Desktop.browse() au lieu de Windows uniquement rundll32. Cela vous donnera une IOException si elle ne peut pas ouvrir l'application d'écriture.

Questions connexes