Expose Request to ProxyProvider.

pull/1127/head
Joe Zhou 2 years ago
parent 244ade7b4c
commit 58fd08bcf8

@ -77,7 +77,7 @@ public class HttpClientDownloader extends AbstractDownloader {
}
CloseableHttpResponse httpResponse = null;
CloseableHttpClient httpClient = getHttpClient(task.getSite());
Proxy proxy = proxyProvider != null ? proxyProvider.getProxy(task) : null;
Proxy proxy = proxyProvider != null ? proxyProvider.getProxy(request, task) : null;
HttpClientRequestContext requestContext = httpUriRequestConverter.convert(request, task.getSite(), proxy);
Page page = Page.fail();
try {

@ -1,6 +1,7 @@
package us.codecraft.webmagic.proxy;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Request;
import us.codecraft.webmagic.Task;
/**
@ -23,7 +24,23 @@ public interface ProxyProvider {
* Get a proxy for task by some strategy.
* @param task the download task
* @return proxy
* @deprecated Use {@link #getProxy(Request, Task)} instead.
*/
Proxy getProxy(Task task);
@Deprecated
default Proxy getProxy(Task task) {
throw new UnsupportedOperationException();
}
/**
* Returns a proxy for the request.
*
* @param request the request
* @param task the download task
* @return proxy
* @since 0.9.0
*/
default Proxy getProxy(Request request, Task task) {
return this.getProxy(task);
}
}

@ -1,6 +1,7 @@
package us.codecraft.webmagic.proxy;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Request;
import us.codecraft.webmagic.Task;
import java.util.ArrayList;
@ -44,7 +45,7 @@ public class SimpleProxyProvider implements ProxyProvider {
}
@Override
public Proxy getProxy(Task task) {
public Proxy getProxy(Request request, Task task) {
return proxies.get(incrForLoop());
}

@ -20,7 +20,7 @@ public class SimpleProxyProviderTest {
Proxy originProxy1 = new Proxy("127.0.0.1", 1087);
Proxy originProxy2 = new Proxy("127.0.0.1", 1088);
SimpleProxyProvider proxyProvider = SimpleProxyProvider.from(originProxy1, originProxy2);
Proxy proxy = proxyProvider.getProxy(TASK);
Proxy proxy = proxyProvider.getProxy(null, TASK);
assertThat(proxy).isEqualTo(originProxy1);
proxy = proxyProvider.getProxy(TASK);
assertThat(proxy).isEqualTo(originProxy2);

Loading…
Cancel
Save