diff options
| author | Michael Peter Christen <mc@yacy.net> | 2026-01-03 01:56:45 +0100 |
|---|---|---|
| committer | Michael Peter Christen <mc@yacy.net> | 2026-01-03 01:56:45 +0100 |
| commit | 076a2d1e02c9777ba48537edc1f7e1aa3c9cc60d (patch) | |
| tree | f7bd4d306f324a18ff6d42e075a4c1b33c799b2a | |
| parent | 2819742bdb053feb7057661748cc7af7dd725ff7 (diff) | |
Handle POST redirects when contacting peers, fix for
https://github.com/yacy/yacy_search_server/issues/684
YaCy’s peer queries use HTTP POST and were not following redirects, so
HTTP→HTTPS redirections (e.g., 8090→8443) failed and peers never
switched protocol/port. This adds a redirect strategy that allows POST
redirects (preserving method/body, except for 303), letting remote peer
connections follow HTTPS redirects correctly.
| -rw-r--r-- | source/net/yacy/cora/protocol/http/HTTPClient.java | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/source/net/yacy/cora/protocol/http/HTTPClient.java b/source/net/yacy/cora/protocol/http/HTTPClient.java index 4c34a89df..cc4cbcabc 100644 --- a/source/net/yacy/cora/protocol/http/HTTPClient.java +++ b/source/net/yacy/cora/protocol/http/HTTPClient.java @@ -29,6 +29,7 @@ import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.net.URI; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; @@ -57,6 +58,7 @@ import org.apache.http.HttpEntity; import org.apache.http.HttpEntityEnclosingRequest; import org.apache.http.HttpHeaders; import org.apache.http.HttpHost; +import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.auth.AuthSchemeProvider; @@ -72,6 +74,7 @@ import org.apache.http.client.methods.HttpHead; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.client.methods.RequestBuilder; import org.apache.http.config.Lookup; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; @@ -88,10 +91,12 @@ import org.apache.http.impl.auth.BasicSchemeFactory; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultRedirectStrategy; import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.IdleConnectionEvictor; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.ProtocolException; import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HttpContext; import org.apache.http.util.ByteArrayBuffer; @@ -220,6 +225,7 @@ public class HTTPClient implements Closeable { builder.setConnectionManager(CONNECTION_MANAGER); builder.setConnectionManagerShared(true); builder.setDefaultRequestConfig(DFLTREQUESTCONFIG); + builder.setRedirectStrategy(new YaCyRedirectStrategy()); builder.setUserAgent(ClientIdentification.yacyInternetCrawlerAgent.userAgent()); builder.setDefaultCookieStore(new BasicCookieStore()); @@ -275,6 +281,26 @@ public class HTTPClient implements Closeable { return pooling; } + private static final class YaCyRedirectStrategy extends DefaultRedirectStrategy { + @Override + protected boolean isRedirectable(final String method) { + return true; + } + + @Override + public HttpUriRequest getRedirect( + final HttpRequest request, + final HttpResponse response, + final HttpContext context) throws ProtocolException { + final URI uri = getLocationURI(request, response, context); + final int status = response.getStatusLine().getStatusCode(); + if (status == HttpStatus.SC_SEE_OTHER) { + return new HttpGet(uri); + } + return RequestBuilder.copy(request).setUri(uri).build(); + } + } + /** * Initialize the maximum connections for the given pool * |
