@@ -111,17 +111,17 @@ public void postData(String url, byte[] data, Header[] headers, ProgressHandler
111111 }
112112
113113 private void postEntity (String url , final HttpEntity entity , Header [] headers ,
114- ProgressHandler progressHandler , CompletionHandler completionHandler , final boolean forceIp ) {
114+ final ProgressHandler progressHandler , final CompletionHandler completionHandler , final boolean forceIp ) {
115115 final CompletionHandler wrapper = wrap (completionHandler );
116116 final Header [] h = reporter .appendStatHeaders (headers );
117117
118118 if (converter != null ){
119119 url = converter .convert (url );
120120 }
121121
122- final AsyncHttpResponseHandler originHandler = new ResponseHandler (url , wrapper , progressHandler );
122+ ResponseHandler handler = new ResponseHandler (url , wrapper , progressHandler );
123123 if (backUpIp == null || converter != null ){
124- client .post (null , url , h , entity , null , originHandler );
124+ client .post (null , url , h , entity , null , handler );
125125 return ;
126126 }
127127 final String url2 = url ;
@@ -130,13 +130,13 @@ private void postEntity(String url, final HttpEntity entity, Header[] headers,
130130 t .execute (new Runnable () {
131131 @ Override
132132 public void run () {
133- URI uri = URI .create (url2 );
133+ final URI uri = URI .create (url2 );
134134 String ip = Dns .getAddress (uri .getHost ());
135135 if (ip == null || ip .equals ("" ) || forceIp ) {
136136 ip = backUpIp ;
137137 }
138138
139- Header [] h2 = new Header [h .length + 1 ];
139+ final Header [] h2 = new Header [h .length + 1 ];
140140 System .arraycopy (h , 0 , h2 , 0 , h .length );
141141
142142 String newUrl = null ;
@@ -146,7 +146,25 @@ public void run() {
146146 throw new AssertionError (e );
147147 }
148148 h2 [h .length ] = new BasicHeader ("Host" , uri .getHost ());
149- client .post (null , newUrl , h2 , entity , null , originHandler );
149+ final String ip2 = ip ;
150+ ResponseHandler handler2 = new ResponseHandler (url2 , wrap (new CompletionHandler () {
151+ @ Override
152+ public void complete (ResponseInfo info , JSONObject response ) {
153+ if (uri .getPort () == 80 || info .statusCode != ResponseInfo .CannotConnectToHost ){
154+ completionHandler .complete (info , response );
155+ return ;
156+ }
157+ String newUrl80 = null ;
158+ try {
159+ newUrl80 = new URI (uri .getScheme (), null , ip2 , 80 , uri .getPath (), uri .getQuery (), null ).toString ();
160+ } catch (URISyntaxException e ) {
161+ throw new AssertionError (e );
162+ }
163+ ResponseHandler handler3 = new ResponseHandler (newUrl80 , completionHandler , progressHandler );
164+ client .post (null , newUrl80 , h2 , entity , null , handler3 );
165+ }
166+ }), progressHandler );
167+ client .post (null , newUrl , h2 , entity , null , handler2 );
150168 }
151169 });
152170 }
0 commit comments