[ http://issues.apache.org/jira/browse/HTTPCLIENT-606?page=all ]
samuel sanchez updated HTTPCLIENT-606: -------------------------------------- Attachment: HttpMethodDirector.java modified class HttpMethodDirector > HttpMethodDirector fails when redirecting to a encoded URL location > ------------------------------------------------------------------- > > Key: HTTPCLIENT-606 > URL: http://issues.apache.org/jira/browse/HTTPCLIENT-606 > Project: HttpComponents HttpClient > Issue Type: Bug > Components: HttpClient > Affects Versions: 3.0.1 > Environment: Windows XP , JDK 1.5.0_09, Intel plattform > Reporter: samuel sanchez > Priority: Minor > Attachments: HttpMethodDirector.java > > > When HttpMethodDirector handles the case of redirecting the incoming > connection to the location specified in the header of the http caller method, > if this location has any "special" charset encoding (extended charsets like > ISO 8859-1,etc.) the redirection fails this way: > dd-MMM-YYYY hh:mm:ss org.apache.commons.httpclient.HttpMethodDirector > processRedirectResponse > WARNING: Redirected location 'http://www.anyCharsetEncodedUrl.ko' is malformed > You can test it using this class: > public class SimpleHttpTestNotWorking { > public static int urlStatus(String pUrl) throws > org.apache.commons.httpclient.HttpException,java.io.IOException{ > org.apache.commons.httpclient.HttpClient client = new > org.apache.commons.httpclient.HttpClient(); > org.apache.commons.httpclient.HttpMethod method = new > org.apache.commons.httpclient.methods.GetMethod(pUrl); > return client.executeMethod(method); > } > > public static void main(String[] args) { > try{ > String url = > "http://www.dipualba.es/municipios/F%E9rez"; //known problematic URL > System.out.println("Return code for ["+url+"]: > "+SimpleHttpTestWorking.urlStatus(url)); > }catch(Exception e){ > e.printStackTrace(); > } > } > } > What I've done to solve it for my particular case has been: > 1) In the requester side, I've modified the calling: > public class SimpleHttpTestWorking { > public static int urlStatus(String pUrl) throws > org.apache.commons.httpclient.HttpException,java.io.IOException{ > org.apache.commons.httpclient.HttpClient client = new > org.apache.commons.httpclient.HttpClient(); > org.apache.commons.httpclient.HttpMethod method; > String encoding = > (String)client.getParams().getParameter("http.protocol.content-charset"); > client.getParams().setParameter("http.protocol.element-charset", > encoding); > try{ > method = new > org.apache.commons.httpclient.methods.GetMethod(pUrl); > }catch(IllegalArgumentException iae){ > try{ > org.apache.commons.httpclient.URI uri = new > org.apache.commons.httpclient.URI(pUrl,true); > method = new > org.apache.commons.httpclient.methods.GetMethod(uri.getURI()); > }catch(org.apache.commons.httpclient.URIException ue){ > org.apache.commons.httpclient.URI uri = new > org.apache.commons.httpclient.URI(pUrl,false,encoding); > method = new > org.apache.commons.httpclient.methods.GetMethod(uri.getEscapedURI()); > } > } > return client.executeMethod(method); > } > > public static void main(String[] args) { > try{ > String url = "http://www.dipualba.es/municipios/Férez"; > //the same problematic URL > System.out.println("Return code for ["+url+"]: > "+SimpleHttpTestWorking.urlStatus(url)); > }catch(Exception e){ > e.printStackTrace(); > } > } > } > 2) In > org.apache.commons.httpclient.HttpMethodDirector.processRedirectResponse(HttpMethod > method) , I've replaced > ... > redirectUri = new URI(location, true); > ... > for the following code: > ... > /* > * [2006-11-14] > * Handles redirections to encoded URI locations > * (only if URI and Connection encoding charset has been properly setted) > * */ > try{ > redirectUri = new URI(location, true); > }catch(URIException ue){ > Object encoding = > this.conn.getParams().getParameter("http.protocol.element-charset"); > if(encoding != null){ > redirectUri = new URI(location, false, (String)encoding); > }else{ > throw ue; > } > } > ... > Hope it helps! -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]