[ 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]