package com.jackson.common.task;
import com.jackson.bean.ContextSrc;
import com.jackson.common.control.ProxyController;
import com.jackson.common.source.CommonSource;
import com.jackson.common.source.GlobalSource;
import com.jackson.db.po.Proxy;
import com.jackson.db.po.Url;
import com.jackson.db.service.UrlService;
import com.jackson.task.RequestParserTask;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Created by Jackson on 2016/11/7.
*/
public class ParserTestTask extends RequestParserTask {
private static Logger logger = LogManager.getLogger(ParserTestTask.class.getName());
private Proxy proxy;
private final CommonSource commonSource;
private final Url url;
public ParserTestTask(Proxy proxy, Url url) {
this.url = url;
this.proxy = proxy;
commonSource = CommonSource.newInstance();
}
public ParserTestTask(Url url) {
this.url = url;
commonSource = CommonSource.newInstance();
}
@Override
public HttpRequestBase getHttpRequest() {
if (getUrl().getRequestState() == Url.REQUEST_STATE_GET) {
return commonSource.pollHttpGet(getUrl());
}
if (getUrl().getRequestState() == Url.REQUEST_STATE_POST) {
return commonSource.pollHttpPost(getUrl());
}
throw new RuntimeException("SimpleRequestTask 请求对象获取错误");
}
@Override
public void onRequestException(Exception e, Url url, HttpRequestBase httpRequest) {
logger.error("请求异常 url:{} Exception:{}", url.getUrl(),e.toString());
}
@Override
public void onRequestFinish(boolean isRequestOk, CloseableHttpClient httpClient, HttpRequestBase httpRequest, Url url) {
if (!isRequestOk) {
logger.error("请求失败 url{}",url.getUrl());
}
if (url.getRequestState() == Url.REQUEST_STATE_GET) {
commonSource.offerHttpGet((HttpGet) httpRequest);
}
if (url.getRequestState() == Url.REQUEST_STATE_POST) {
commonSource.offerHttpPost((HttpPost) httpRequest);
}
}
@Override
protected Url getUrl() {
return url;
}
@Override
protected Proxy getProxy() {
return proxy;
}
@Override
protected ProxyController getProxyController() {
return null;
}
@Override
protected UrlService getUrlService() {
return null;
}
@Override
protected boolean onStatusCode(int statusCode, CloseableHttpResponse response) {
return statusCode >= 200 && statusCode<300;
}
@Override
protected ContextSrc getContextSrc() {
return null;
}
@Override
protected void onParseException(Exception e, Url url, String content) {
logger.error("解析异常 url:{},Exception{}", url.getUrl(),e.getMessage());//记录错误日志,方便排查问题,改解析代码
}
@Override
protected void onParseFinish(boolean parseSuccess, Url url, String content) {
if (parseSuccess){
logger.info("解析成功 url:{}",getUrl().getUrl());
}
else {
if(proxy!=null)
logger.error("解析失败 url:{},proxy host:{} proxy port:{},parserName{}", url.getUrl(),proxy.getHost(),proxy.getPort(), url.getParserClass());//记录错误日志,方便排查问题,改解析代码
else
logger.error("解析失败 url:{},parserName{}", url.getUrl(), url.getParserClass());//记录错误日志,方便排查问题,改解析代码
}
}
}