[ http://issues.apache.org/jira/browse/HTTPCLIENT-606?page=comments#action_12452565 ] Ori Regev commented on HTTPCLIENT-606: --------------------------------------
Hi, I'm encountering the same problem (version 3.0.1) when trying to load the following URL with HTTPClient: http://www.comedycentral.com/sitewide/droplets/podRedirect.jhtml/redirect.m4v?feed=ComedyCentralStandUpPodcastForResearch&file=http://a1926.g.akamai.net/downloadstor.download.akamai.com/10768/comedy/podcasts/standup/133_standup.m4v (This is an enclosure URL from the RSS feed at: http://feeds.feedburner.com/comedycentral/standup, I've noticed that other feeds from FeedBurner misbehave in the same way. Please note that Firefox and IE manage to redirect despite this encoding problem) thanks, Ori > 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 > Fix For: 3.1 Final > > Attachments: httpmethoddir.patch, patch.txt > > > 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]
