антикапча и java

Тема в разделе "Как сделать...", создана пользователем главврач, 12 мар 2010.

Статус темы:
Закрыта.
  1. главврач

    главврач Постоялец

    Регистр.:
    11 фев 2009
    Сообщения:
    81
    Симпатии:
    12
    Я полный ноль в java, подскажите плиз почему антикапча возвращает ERROR_IMAGE_IS_NOT_PNG
    Код:
    package wipe.net;
    import java.awt.image.BufferedImage;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.util.Random;
    import javax.imageio.ImageIO;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpHost;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpVersion;
    import org.apache.http.auth.AuthScope;
    import org.apache.http.auth.UsernamePasswordCredentials;
    import org.apache.http.client.CredentialsProvider;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.conn.ClientConnectionManager;
    import org.apache.http.conn.scheme.PlainSocketFactory;
    import org.apache.http.conn.scheme.Scheme;
    import org.apache.http.conn.scheme.SchemeRegistry;
    import org.apache.http.entity.mime.MultipartEntity;
    import org.apache.http.entity.mime.content.ContentBody;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.entity.mime.content.StringBody;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
    import org.apache.http.params.BasicHttpParams;
    import org.apache.http.params.HttpParams;
    import org.apache.http.params.HttpProtocolParams;
    import sun.misc.BASE64Encoder;
    import wipe.gui.gui;
    import wipe.util.Files;
    import wipe.util.config.Config;
    import wipe.util.proxy;
    public class WakabaWipe
      implements Runnable
    {
      private String proxyh;
      private String file;
      private int proxyp;
      private boolean error = false;
      private HttpHost proxy;
      private String msg;
      private byte[] b = new byte[1024];
      private int i = 1;
      private String password;
      private String login;
      private Random r = new Random();
      private gui g = gui.getInstance();
      public WakabaWipe(String h, int port, String f, String ms)
      {
        this.proxyh = h;
        this.proxyp = port;
        this.file = f;
        this.msg = ms;
        this.proxy = new HttpHost(this.proxyh, this.proxyp, "http");
        new Thread(this).start();
      }
      public WakabaWipe(proxy p, String f, String s)
      {
        this.proxyh = p.host;
        this.proxyp = p.port;
        this.file = f;
        this.msg = s;
        if (p.isAuth())
        {
          this.login = p.login;
          this.password = p.password;
        }
        this.proxy = new HttpHost(this.proxyh, this.proxyp, "http");
        new Thread(this).start();
      }
      public WakabaWipe(String h, int port, String login, String password, String f, String ms)
      {
        this.proxyh = h;
        this.proxyp = port;
        this.file = f;
        this.msg = ms;
        this.login = login;
        this.password = password;
        this.proxy = new HttpHost(this.proxyh, this.proxyp, "http");
        new Thread(this).start();
      }
      public void run()
      {
        Thread.currentThread().setName(this.proxyh);
        try {
          Thread.currentThread().setPriority(10);
          while (!(this.error))
          {
            this.g.addText("Засыпаем на " + Config.timeout + " миллисекунд." + " Поток " + Thread.currentThread().getName());
            Thread.sleep(Config.timeout);
            if (!(Config.onePic))
              this.file = Files.getFile();
            reImg();
            post(this.msg); }
        } catch (Exception e) {
          e.printStackTrace(); }
      }
      private DefaultHttpClient createClient() {
        SchemeRegistry supportedSchemes = new SchemeRegistry();
        supportedSchemes.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, "UTF-8");
        HttpProtocolParams.setUseExpectContinue(params, false);
        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, supportedSchemes);
        DefaultHttpClient httpclient = new DefaultHttpClient(ccm, params);
        if (this.login != null)
        {
          httpclient.getCredentialsProvider().setCredentials(new AuthScope(this.proxyh, this.proxyp), new UsernamePasswordCredentials(this.login, this.password));
        }
        httpclient.getParams().setParameter("http.route.default-proxy", this.proxy);
        return httpclient;
      }
      public String getByProxy() throws Exception {
        DefaultHttpClient httpclient = createClient();
        String url;
        if (Config.wipe)
          url = "http://2-ch.ru" + Config.board + "captcha.pl?key=mainpage&dummy=" + String.valueOf(Math.floor(Math.random() * 1000.0D));
        else {
          url = "http://2-ch.ru" + Config.board + "captcha.pl?key=res" + Config.thread + "&dummy=" + String.valueOf(Math.floor(Math.random() * 1000.0D));
        }
        HttpHost target = new HttpHost("2-ch.ru", 80, "http");
        HttpGet httpget = new HttpGet(url);
        this.g.addText("executing request to " + target + " via " + this.proxy);
        httpget.addHeader("Cookie", "wakabastyle=photon");
        if (Config.wipe)
          httpget.addHeader("Referer", "http://2-ch.ru" + this.g.getBoard());
        else {
          httpget.addHeader("Referer", "http://2-ch.ru" + this.g.getBoard() + "res/" + this.g.getThread() + ".html");
        }
        httpclient.execute(target, httpget).getEntity().getContent().read(this.b);
        return AntiCaptchaComOCR();
      }
      private String AntiCaptchaComOCR() throws Exception {
        String urlGetC = "http://antigate.com/res.php?key=" + Config.key + "&action=get&id=";
        HttpPost postToAC = new HttpPost("http://antigate.com/in.php");
        postToAC.addHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6");
        MultipartEntity me = new MultipartEntity();
        me.addPart("method", new StringBody("base64"));
        me.addPart("key", new StringBody(Config.key));
        me.addPart("body", new StringBody(new BASE64Encoder().encode(this.b)));
        me.addPart("ext", new StringBody("png"));
        me.addPart("numeric", new StringBody("2"));
        postToAC.setEntity(me);
        HttpResponse response = createClient().execute(postToAC);
        BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        String s = br.readLine();
        System.out.println(s);
        if (s == null)
          return "";
        if (s.contains("OK"))
        {
          urlGetC = urlGetC + s.substring(3);
          HttpGet httpGetC = new HttpGet(urlGetC);
          while (!(this.error))
          {
            BufferedReader br2 = new BufferedReader(new InputStreamReader(createClient().execute(httpGetC).getEntity().getContent()));
            String c = br2.readLine();
            System.out.println(c);
            if (c.contains("CAPCHA_NOT_READY"))
            {
              Thread.sleep(500L);
            }
            else if (c.contains("OK"))
            {
              return c.substring(3).toLowerCase().replace(" ", "");
            }
          }
        }
        else if (s.contains("ERROR"))
        {
          this.g.addText(s);
          stop();
        }
        else
        {
          this.g.addText(s);
          stop();
        }
        return "";
      }
      public void reImg()
      {
        try {
          System.gc();
          BufferedImage bi = ImageIO.read(new FileInputStream(this.file));
          bi.setRGB(this.r.nextInt(10), this.r.nextInt(10), this.r.nextInt(10));
          ImageIO.write(bi, "jpg", new FileOutputStream(this.file));
        }
        catch (Exception e)
        {
          e.printStackTrace();
          this.error = true;
        }
      }
      public void stop()
      {
        this.error = true;
        Thread.currentThread().setPriority(1);
        Thread.currentThread().interrupt();
        this.g.addText("Поток " + Thread.currentThread().getName() + " остановлен из-за ошибок"); }
      public void post(String message) throws Exception {
        if (this.error)
          return;
        String url = "http://2-ch.ru" + Config.board + "wakaba.pl";
        HttpPost post = new HttpPost(url);
        if (Config.wipe)
          post.addHeader("Cookie", "wakabastyle=photon; gb2=board;");
        else {
          post.addHeader("Cookie", "wakabastyle=photon; gb2=thread;");
        }
        if (Config.wipe)
          post.addHeader("Referer", "http://2-ch.ru" + Config.board);
        else {
          post.addHeader("Referer", "http://2-ch.ru" + Config.board + "res/" + Config.thread + ".html");
        }
        post.addHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6");
        String c = getByProxy();
        if (c.isEmpty())
        {
          this.g.addText("Нет капчи, cворачиваем процесс");
          stop();
          return;
        }
        MultipartEntity me = new MultipartEntity();
        me.addPart("task", new StringBody("post"));
        if (Config.wipe)
          me.addPart("parent", new StringBody(""));
        else
          me.addPart("parent", new StringBody(this.g.getThread()));
        me.addPart("name", new StringBody(""));
        me.addPart("link", new StringBody(""));
        me.addPart("akane", new StringBody(""));
        if (this.g.isSage())
          me.addPart("nabiki", new StringBody("sage"));
        else {
          me.addPart("nabiki", new StringBody(""));
        }
        me.addPart("kasumi", new StringBody(""));
        me.addPart("shampoo", new StringBody(message));
        me.addPart("captcha", new StringBody(c));
        me.addPart("password", new StringBody(Config.password));
        if (Config.wipe)
          me.addPart("gb2", new StringBody("board"));
        else {
          me.addPart("gb2", new StringBody("thread"));
        }
        if (this.file.isEmpty())
        {
          me.addPart("file", new StringBody(""));
        }
        else
        {
          ContentBody cb = new FileBody(new File(this.file), "image/png");
          me.addPart("file", cb);
        }
        post.setEntity(me);
        if (this.error)
          stop();
        BufferedReader br = new BufferedReader(new InputStreamReader(createClient().execute(post).getEntity().getContent()));
        String s = br.readLine();
        System.out.println(s);
        if (s.contains("Ошибка:"))
        {
          this.g.addText(s.substring(s.indexOf("Ошибка:"), s.indexOf("<br /><br />")));
        }
        else if (s.contains("Error:"))
        {
          this.g.addText(s.substring(s.indexOf("Error:"), s.indexOf("<br /><br />")));
        }
        else
        {
          this.g.addText("Cообщение успешно " + (this.i++) + " Proxy is: " + this.proxy.getHostName());
        }
      }
    }
     
  2. NeoGayver

    NeoGayver

    Регистр.:
    27 авг 2008
    Сообщения:
    225
    Симпатии:
    83
    Что то нет возвратной информации ERROR_IMAGE_IS_NOT_PNG в коде видимо вы не весь код залили!
    Ну а по первым признакам это то что скрипт предназначен для чтения PNG изображений! выдав вам ошибку он на это и ссылается что изображение не является png
     
  3. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    ТС, как насчёт того, чтоб внимательнее смотреть куда постишь?
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    561
    Было тоже самое, это означает что капчу в формате с jpg или gif сохранили с именем *.png и её передаём на распознование, но антикапча определяет формат только по имени и естественно говорит что ERROR_IMAGE_IS_NOT_PNG, тобишь картинка не является правильным png изображением.
    Ещё вариант- капча сохраняется с ошибками (например скачалась не вся) и антикапча бьёт тревогу
     
Статус темы:
Закрыта.