thread - java net malformedurlexception no protocol ${ client url
java.net.MalformedURLException: no hay protocolo en URL basado en una cadena modificada con URLEncoder (3)
Así que intenté usar esta cadena en una URL: -
http://site-test.collercapital.com/Meetings/IC/DownloadDocument?meetingId=c21c905c-8359-4bd6-b864-844709e05754&itemId=a4b724d1-282e-4b36-9d16-d619a807ba67&file=//s604132shvw140/Test-Documents/c21c905c-8359-4bd6-b864-844709e05754_attachments/7e89c3cb-ce53-4a04-a9ee-1a584e157987/myDoc.pdf
En este código: -
String fileToDownloadLocation = //The above string
URL fileToDownload = new URL(fileToDownloadLocation);
HttpGet httpget = new HttpGet(fileToDownload.toURI());
Pero en este punto me sale el error:
java.net.URISyntaxException: Illegal character in query at index 169:Blahblahblah
Me di cuenta de que con un poco de googlear, esto se debía a los caracteres en la URL (adivinando el &), por lo que luego agregué algo de código para que ahora parezca:
String fileToDownloadLocation = //The above string
fileToDownloadLocation = URLEncoder.encode(fileToDownloadLocation, "UTF-8");
URL fileToDownload = new URL(fileToDownloadLocation);
HttpGet httpget = new HttpGet(fileToDownload.toURI());
Sin embargo, cuando intento ejecutar esto, aparece un error cuando intento crear la URL, luego el error dice:
java.net.MalformedURLException: no protocol: http%3A%2F%2Fsite-test.collercapital.com%2FMeetings%2FIC%2FDownloadDocument%3FmeetingId%3Dc21c905c-8359-4bd6-b864-844709e05754%26itemId%3Da4b724d1-282e-4b36-9d16-d619a807ba67%26file%3D%5C%5Cs604132shvw140%5CTest-Documents%5Cc21c905c-8359-4bd6-b864-844709e05754_attachments%5C7e89c3cb-ce53-4a04-a9ee-1a584e157987%myDoc.pdf
Parece que no puedo hacer la codificación hasta que haya creado la URL, de lo contrario, reemplaza las barras y cosas que no debería, pero no puedo ver cómo puedo crear la URL con la cadena y luego formatearla. Es adecuado para su uso. No estoy muy familiarizado con todo esto y esperaba que alguien pudiera señalarme lo que me falta para obtener la cadena A en una URL con el formato adecuado para luego usarla con los caracteres correctos reemplazados.
Cualquier sugerencia muy apreciada!
Debe codificar los valores de su parámetro antes de concatenarlos a URL.
La barra invertida /
es un carácter especial que debe ser escapado como %5C
Ejemplo de escape:
String paramValue = "param//with//backslash";
String yourURLStr = "http://host.com?param=" + java.net.URLEncoder.encode(paramValue, "UTF-8");
java.net.URL url = new java.net.URL(yourURLStr);
El resultado es http://host.com?param=param%5Cwith%5Cbackslash
que tiene el formato correcto de la cadena url.
Desea utilizar plantillas URI . Mire detenidamente el URLEncoder.encode()
README de este proyecto: URLEncoder.encode()
NO funciona para los URI.
Permítanos llevar su URL original:
http://site-test.as.collercapital.com/Meetings/IC/DownloadDocument?meetingId=Pay.png.asp.as.png.asp.cgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggb -4bd6-b864-844709e05754_attachments / 7e89c3cb-ce53-4a04-a9ee-1a584e157987 / myDoc.pdf
y conviértalo en una plantilla de URI con dos variables (en varias líneas para mayor claridad):
http://site-test.collercapital.com/Meetings/IC/DownloadDocument
?meetingId={meetingID}&itemId={itemID}&file={file}
Ahora construyamos un mapa de variables con estas tres variables usando la biblioteca mencionada en el enlace:
final VariableMap = VariableMap.newBuilder()
.addScalarValue("meetingID", "c21c905c-8359-4bd6-b864-844709e05754")
.addScalarValue("itemID", "a4b724d1-282e-4b36-9d16-d619a807ba67e")
.addScalarValue("file", "////s604132shvw140//Test-Documents"
+ "//c21c905c-8359-4bd6-b864-844709e05754_attachments"
+ "//7e89c3cb-ce53-4a04-a9ee-1a584e157987//myDoc.pdf")
.build();
final URITemplate template
= new URITemplate("http://site-test.collercapital.com/Meetings/IC/DownloadDocument"
+ "meetingId={meetingID}&itemId={itemID}&file={file}");
// Generate URL as a String
final String theURL = template.expand(vars);
¡Esto está GARANTIZADO de devolver una URL completamente funcional!
Tengo el mismo problema, leí la url con un archivo de propiedades:
String configFile = System.getenv("system.Environment");
if (configFile == null || "".equalsIgnoreCase(configFile.trim())) {
configFile = "dev.properties";
}
// Load properties
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("/" + configFile));
//read url from file
apiUrl = properties.getProperty("url").trim();
URL url = new URL(apiUrl);
//throw exception here
URLConnection conn = url.openConnection();
dev.properties
url = "https://myDevServer.com/dev/api/gate"
debería ser
dev.properties
url = https://myDevServer.com/dev/api/gate
sin "" y mi problema está resuelto.
Según la documentation oracle.
- Se lanza para indicar que se ha producido una URL con formato incorrecto. No se pudo encontrar un protocolo legal en una cadena de especificación o la cadena no se pudo analizar.
Así que significa que no se analiza dentro de la cadena.