Нужна Java библиотека для разработки спамеров

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Diversant123, 9 Aug 2013.

  1. Diversant123

    Diversant123 New Member

    Joined:
    11 Nov 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Приветствую.
    Раньше писал на пыхе, CURL, но нужна нормальная многопоточность и пересел на яву.
    Пробовал стандартную HttpURLConnection, но она муторная, запросы сложно отправлять.
    Написал либу для работы с этим классом, но некоторые запросы, какие нормально выполнялись курлом, она не выполняет.
    HttpClient от апача так вообще громоздкая хрень, с извращенной протеворечаей друг другу документацией.

    Может кто поделится своими наработками.
     
  2. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    На основе Appache переделка "а-ля Indy"
    Работал мало, могут быть баги. Если найдешь - отпишись пожалуйста
    HTTP.java
    Code:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package com.xophet.http;
    
    /**
     *
     * @author xophet
     */
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.List;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import org.apache.http.Header;
    import org.apache.http.HttpEntity;
    import org.apache.http.impl.client.BasicResponseHandler;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.StatusLine;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.ResponseHandler;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    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.client.params.ClientPNames;
    import org.apache.http.entity.mime.MultipartEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.params.BasicHttpParams;
    import org.apache.http.params.CoreConnectionPNames;
    import org.apache.http.params.CoreProtocolPNames;
    import org.apache.http.params.HttpParams;
    import org.apache.http.protocol.BasicHttpContext;
    import org.apache.http.protocol.ExecutionContext;
    import org.apache.http.util.EntityUtils;
    public class HTTP {
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        DefaultHttpClient http = new DefaultHttpClient();
        BasicHttpContext localContext = new BasicHttpContext();
        
        HttpPost post;
        HttpGet get;
        String lastRedirect="";
        public HTTP(){
            HttpParams params = new BasicHttpParams();
            params.setBooleanParameter(ClientPNames.HANDLE_REDIRECTS,true);
            params.setIntParameter(ClientPNames.MAX_REDIRECTS,15);
            params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
            params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,10000);
            params.setParameter(CoreProtocolPNames.USER_AGENT, "default user agent");
            http.setParams(params);
        }
        public void setHandleRedirects(Boolean handle){
            HttpParams params = http.getParams();
            params.setBooleanParameter(ClientPNames.HANDLE_REDIRECTS,handle);
        }
        public Boolean getHandleRedirects(){
            HttpParams params = http.getParams();
            return params.getBooleanParameter(ClientPNames.HANDLE_REDIRECTS, true);
        }
        public void setMaxRedirects(int maxRedirects){
            HttpParams params = http.getParams();
            params.setIntParameter(ClientPNames.MAX_REDIRECTS,maxRedirects);
        }
        public int getMaxRedirects(){
            HttpParams params = http.getParams();
            return params.getIntParameter(ClientPNames.MAX_REDIRECTS, 15);
        }
        public void setReadTimeout(int timeOut){
            HttpParams params = http.getParams();
            params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT,timeOut);
        }
        public int getReadTimeout(){
            HttpParams params = http.getParams();
            return params.getIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
        }
        public void setConnectionTimeout(int timeOut){
            HttpParams params = http.getParams();
            params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,timeOut);
        }
        public int getConnectionTimeout(){
            HttpParams params = http.getParams();
            return params.getIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
        }
        public void setUserAgent(String userAgent){
            HttpParams params = http.getParams();
            params.setParameter(CoreProtocolPNames.USER_AGENT,userAgent);
        }
        public String getUserAgent(){
            HttpParams params = http.getParams();
            return (String) params.getParameter(CoreProtocolPNames.USER_AGENT);
        }
        public String get(String link) throws HttpException{
            get = new HttpGet(link);
            return this.executeAction(get, link);
        }
        public String post(String link, MultipartEntity data) throws HttpException{
            post = new HttpPost(link);
            post.setEntity(data);
            return this.executeAction(post, link);
        }
        public String post(String link, List <NameValuePair> data) throws HttpException{
            post = new HttpPost(link);
            try {
                post.setEntity(new UrlEncodedFormEntity(data));
            } catch (UnsupportedEncodingException ex) {
                Logger.getLogger(HTTP.class.getName()).log(Level.SEVERE, null, ex);
            }
            return this.executeAction(post, link);
        }
        public byte[] getToByteArray(String link) throws HttpException{
            get = new HttpGet(link);
            return this.executeActionToByteArray(get, link);
        }
        public byte[] postToByteArray(String link, MultipartEntity data) throws HttpException{
            post = new HttpPost(link);
            post.setEntity(data);
            return this.executeActionToByteArray(post, link);
        }
        public byte[] postToByteArray(String link, List <NameValuePair> data) throws HttpException{
            post = new HttpPost(link);
            try {
                post.setEntity(new UrlEncodedFormEntity(data));
            } catch (UnsupportedEncodingException ex) {
                Logger.getLogger(HTTP.class.getName()).log(Level.SEVERE, null, ex);
            }
            return this.executeActionToByteArray(post, link);
        }
        /**
         * Здесь всегда будет храниться последний редирект
         * в случае, если редиректа не было, то последний URI
         */
        public String getLastRedirect(){
            return this.lastRedirect;
        }
        String executeAction(final HttpRequestBase action, final String link) throws HttpException{
            String res="";
            String Error="";
            HttpResponse response = null;
            try {
                response = http.execute(action, localContext);
            } catch (ClientProtocolException ex) {
                Logger.getLogger(HTTP.class.getName()).log(Level.SEVERE, null, ex);     
            } catch (IOException ex) {
                Logger.getLogger(HTTP.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                try {
                    // если в ответе хоть что-то есть (может не быть, если превышено максимальное число редиректов, etc)
                    // то преобразуем ответ в строку
                    if (response != null)
                        res=responseHandler.handleResponse(response);
                } catch (ClientProtocolException ex) {
                    //если возникнет ошибка преобразования, то генериуем исключение 
                    //с кодом завершения последней HTTP-операции (200,301 etc)
                    throw new HttpException(response.getStatusLine().getReasonPhrase(),response.getStatusLine().getStatusCode());
                } catch (IOException ex1) {
                    Logger.getLogger(HTTP.class.getName()).log(Level.SEVERE, null, ex1);
                }
            }
            finally
            {
                //при любом завершении операции сохраним последний редирект
                Header head = ((HttpResponse) localContext.getAttribute(ExecutionContext.HTTP_RESPONSE)).getFirstHeader("Location");
                lastRedirect = head==null? "": head.getValue(); 
            }
            return res;        
        }
        byte[] executeActionToByteArray(final HttpRequestBase action, final String link) throws HttpException{
            HttpResponse response = null;
            byte[] result = new byte[0];
            ResponseHandler<byte[]> a2 = new ResponseHandler<byte[]>() {
                @Override
                public byte[] handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
                    StatusLine statusLine = response.getStatusLine();
                    HttpEntity entity = response.getEntity();
                    if (statusLine.getStatusCode() >= 300) {
                        EntityUtils.consume(entity);
                        throw new HttpException(statusLine.getReasonPhrase(),statusLine.getStatusCode());
                    }
                    return entity == null ? new byte[0] : EntityUtils.toByteArray(entity);
                }    
            };
            try {
                response = http.execute(action, localContext);
            } catch (ClientProtocolException ex) {
                Logger.getLogger(HTTP.class.getName()).log(Level.SEVERE, null, ex);     
            } catch (IOException ex) {
                Logger.getLogger(HTTP.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                try {
                    // если в ответе хоть что-то есть (может не быть, если превышено максимальное число редиректов, etc)
                    // то преобразуем ответ в строку
                    result = a2.handleResponse(response);
                } catch (ClientProtocolException ex) {
                    //если возникнет ошибка преобразования, то генериуем исключение 
                    //с кодом завершения последней HTTP-операции (200,301 etc)
                    throw new HttpException(response.getStatusLine().getReasonPhrase(),response.getStatusLine().getStatusCode());
                } catch (IOException ex) {
                    Logger.getLogger(HTTP.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            finally
            {
                //при любом завершении операции сохраним последний редирект
                Header head = ((HttpResponse) localContext.getAttribute(ExecutionContext.HTTP_RESPONSE)).getFirstHeader("Location");
                lastRedirect = head==null? "": head.getValue(); 
            }
            return result;
        }
        public static void main(String[] args) {
            // TODO code application logic here
            HTTP http = new HTTP();
            http.setHandleRedirects(false);
    //        http.setMaxRedirects(15);
            try {
                System.out.println(http.get("https://www.google.com.ua"));
            } catch (HttpException ex) {
                System.out.println(ex.getErrorCode());
                Logger.getLogger(HTTP.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println("Final redirect: " + http.getLastRedirect());
        }
    }
    
    HttpException.java
    Code:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package com.xophet.http;
    
    import org.apache.http.client.ClientProtocolException;
    
    /**
     *
     * @author XopHeT
     */
    public class HttpException extends ClientProtocolException {
        int errorCode;
        public HttpException(String message, int errorCode){
            super(message);
            this.errorCode=errorCode;
        }
        public HttpException(String message, String errorCode){
            super(message);
            this.errorCode=Integer.parseInt(errorCode);
        }
        public int getErrorCode(){
            return errorCode;
        }
    }
    
    InputStreamBody.java
    Code:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package com.xophet.http;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import org.apache.http.entity.mime.MIME;
    import org.apache.http.entity.mime.content.AbstractContentBody;
    /**
     *{@inheritDoc}
     * @since 4.0
     */
    public class InputStreamBody extends AbstractContentBody {
    
        private final InputStream in;
        private final String filename;
    
        public InputStreamBody(final InputStream in, final String mimeType, final String filename) {
            super(mimeType);
            if (in == null) {
                throw new IllegalArgumentException("Input stream may not be null");
            }
            this.in = in;
            this.filename = filename;
        }
    
        public InputStreamBody(final InputStream in, final String filename) {
            this(in, "application/octet-stream", filename);
        }
    
        public InputStream getInputStream() {
            return this.in;
        }
    
        /**
         * @deprecated use {@link #writeTo(OutputStream)}
         */
        @Deprecated
        public void writeTo(final OutputStream out, int mode) throws IOException {
            writeTo(out);
        }
    
        public void writeTo(final OutputStream out) throws IOException {
            if (out == null) {
                throw new IllegalArgumentException("Output stream may not be null");
            }
            try {
                byte[] tmp = new byte[4096];
                int l;
                while ((l = this.in.read(tmp)) != -1) {
                    out.write(tmp, 0, l);
                }
                out.flush();
            } finally {
                this.in.close();
            }
        }
    
        public String getTransferEncoding() {
            return MIME.ENC_BINARY;
        }
    
        public String getCharset() {
            return null;
        }
    
        @Override
        public long getContentLength() {
            long s=-1;
            try {
                s=in.available();
            } catch (IOException ex) {
                
            }
            return s;
        }
    
        public String getFilename() {
            return this.filename;
        }
    
    }
    
    
     
Loading...
Similar Threads - Нужна Java библиотека
  1. b3
    Replies:
    4
    Views:
    3,357