刷新代理api重构,需要提供旧代理,如果依然是旧代理,才进行刷新,防止应延迟响应造成的过度刷新

master
yao 2020-12-22 18:19:37 +08:00
parent 2e2a0fdf3e
commit 0aa2c3949d
5 changed files with 28 additions and 6 deletions

View File

@ -421,7 +421,7 @@ public class Spider implements Runnable, Task {
} }
} else if(site.getRefreshCode().contains(page.getStatusCode())) { } else if(site.getRefreshCode().contains(page.getStatusCode())) {
logger.info("page status code error, page {} , code: {}, start refresh downloader", request.getUrl(), page.getStatusCode()); logger.info("page status code error, page {} , code: {}, start refresh downloader", request.getUrl(), page.getStatusCode());
downloader.refreshComponent(this); failHandler(request);
}else { }else {
logger.info("page status code error, page {} , code: {}", request.getUrl(), page.getStatusCode()); logger.info("page status code error, page {} , code: {}", request.getUrl(), page.getStatusCode());
} }
@ -430,6 +430,11 @@ public class Spider implements Runnable, Task {
} }
private void onDownloaderFail(Request request) { private void onDownloaderFail(Request request) {
failHandler(request);
}
private void failHandler(Request request){
downloader.refreshComponent(this);
if (site.getCycleRetryTimes() == 0) { if (site.getCycleRetryTimes() == 0) {
sleep(site.getSleepTime()); sleep(site.getSleepTime());
} else { } else {

View File

@ -54,7 +54,7 @@ public class HttpClientDownloader extends AbstractDownloader {
this.refreshClientOnError = clientOnError; this.refreshClientOnError = clientOnError;
} }
public void setRefreshProxyOnError(Predicate<Throwable> proxyOnError) { public void setRefreshProxyOnError(Predicate<Throwable> proxyOnError) {
this.refreshProxyOnError = refreshProxyOnError; this.refreshProxyOnError = proxyOnError;
} }
public void setHttpUriRequestConverter(HttpUriRequestConverter httpUriRequestConverter) { public void setHttpUriRequestConverter(HttpUriRequestConverter httpUriRequestConverter) {
@ -94,7 +94,7 @@ public class HttpClientDownloader extends AbstractDownloader {
logger.warn("download page {} error", request.getUrl(), e); logger.warn("download page {} error", request.getUrl(), e);
onError(request, e, proxyProvider); onError(request, e, proxyProvider);
if (proxyProvider != null && refreshProxyOnError.test(e)) { if (proxyProvider != null && refreshProxyOnError.test(e)) {
proxyProvider.refreshProxy(task); proxyProvider.refreshProxy(task,proxy);
} }
if(refreshClientOnError.test(e)) { if(refreshClientOnError.test(e)) {
httpClients.remove(task.getSite().getDomain()); httpClients.remove(task.getSite().getDomain());
@ -115,7 +115,7 @@ public class HttpClientDownloader extends AbstractDownloader {
@Override @Override
public void refreshComponent(Task task) { public void refreshComponent(Task task) {
if (proxyProvider != null ) { if (proxyProvider != null ) {
proxyProvider.refreshProxy(task); proxyProvider.refreshProxy(task,proxyProvider.getCurrentProxy(task));
} }
httpClients.remove(task.getSite().getDomain()); httpClients.remove(task.getSite().getDomain());

View File

@ -143,6 +143,7 @@ public class HttpClientGenerator {
SocketConfig.Builder socketConfigBuilder = SocketConfig.custom(); SocketConfig.Builder socketConfigBuilder = SocketConfig.custom();
socketConfigBuilder.setSoKeepAlive(true).setTcpNoDelay(true); socketConfigBuilder.setSoKeepAlive(true).setTcpNoDelay(true);
socketConfigBuilder.setSoTimeout(site.getTimeOut()); socketConfigBuilder.setSoTimeout(site.getTimeOut());
SocketConfig socketConfig = socketConfigBuilder.build(); SocketConfig socketConfig = socketConfigBuilder.build();
httpClientBuilder.setDefaultSocketConfig(socketConfig); httpClientBuilder.setDefaultSocketConfig(socketConfig);
connectionManager.setDefaultSocketConfig(socketConfig); connectionManager.setDefaultSocketConfig(socketConfig);

View File

@ -23,8 +23,19 @@ public interface ProxyProvider {
* IPIPIP使 * IPIPIP使
* *
* @param task * @param task
* @param proxy
*/ */
void refreshProxy(Task task); void refreshProxy(Task task,Proxy proxy);
/**
*
*
*
* @param task
* @return
*/
Proxy getCurrentProxy(Task task);
/** /**
* Get a proxy for task by some strategy. * Get a proxy for task by some strategy.

View File

@ -31,7 +31,12 @@ public class SimpleProxyProvider implements ProxyProvider {
} }
@Override @Override
public void refreshProxy(Task task) { public Proxy getCurrentProxy(Task task) {
return null;
}
@Override
public void refreshProxy(Task task,Proxy proxy) {
} }