[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我发现我网络差,经常超时的情况下,似乎数据经常重置啊。

可能和服务器处理超时的异常有关?
能不能改进一下?
或者改用sqlite数据库?
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP


前几天网络出奇的好。忘记关程序,跑一晚上就有四千了。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

网站挂了,快修。
我我我还要测试我的程序。
1

评分人数

去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

本帖最后由 523066680 于 2017-7-8 17:14 编辑

老刘不是发了个 图灵123 API 用来对接这里的问题不知道可否

好了,不赛跑了。代码:
  1. use JSON;
  2. use Encode;
  3. use Try::Tiny;
  4. use Data::Dumper;
  5. use IO::Handle;
  6. STDOUT->autoflush(1);
  7. use LWP::Simple;
  8. use LWP::UserAgent;
  9. our $user = "vic2";
  10. our $website = 'http://bbaass.tk/math/';
  11. our $ua = LWP::UserAgent->new(  agent => 'Mozilla/5.0', timeout => 3 );
  12. our $res;
  13. BEGIN:
  14. $res = $ua->post( $website, [ username => $user, send => 'reg' ] );
  15. $res = $ua->post( $website, [ username => $user, send => 'user' ] );
  16. my $min = 0;
  17. my $max = 100;
  18. my $test = int(($max + $min) / 2);
  19. my $data;
  20. $data = check($test);
  21. my $tokens = $data->{'tokens'};
  22. while ( $data->{re} ne "=" )
  23. {
  24.     $min = $test + 1 if ($data->{re} eq "<");
  25.     $max = $test - 1 if ($data->{re} eq ">");
  26.     $test = int(($max + $min) / 2);
  27.     $data = check( $test );
  28.     printf "min: %d max: %d, test: %d  %s, token: %s\n",
  29.         $min, $max, $test, $data->{re}, $data->{tokens};
  30.     if ( ($data->{tokens} ne $tokens) and $data->{re} ne "=" )
  31.     {
  32.         print "Tokens different, go back\n";
  33.         goto BEGIN;
  34.     }
  35. }
  36. print "Again\n";
  37. goto BEGIN;
  38. sub check
  39. {
  40.     my $data;
  41.     my $res;
  42.     while (1)
  43.     {
  44.         $res = $ua->post(
  45.             $website,
  46.             [ username => $user, send => 'Answer', math => $_[0] ],
  47.         );
  48.         try   { $data = decode_json( $res->content() ); last; }
  49.         catch { sleep 3.0; print "Content error, try again.\n" }
  50.     }
  51.     return $data;
  52. }
复制代码
1

评分人数

TOP

回复 32# codegay

到时后可以做个题目TOKEN 的其他游戏 用:[http://bbaass.tk/Answer.php] [题库来源 https://aoaoao.me/]
反正API都做好了- -
最多数据库一下下

TOP

回复 32# codegay
主要是网络质量会影响得分。

TOP

回复 27# happy886rr


    主要还是懒。
但是只是能请求成功,对我来说不存在会拒绝这种事情。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 30# 523066680


    感觉是没有用,高频率请求对双方都有影响。
我不知道服务器是不是防火墙之类会检查高频率请求会封IP什么的。所以主动加了0.3秒的睡眠。
只要火力全开的应该都超过我。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

本帖最后由 523066680 于 2017-7-8 16:37 编辑

我在想能不能在别的网络上运行脚本,假冒 codegay 输入错误的数值来阻击他的刷新频率
(实测然并卵

TOP

回复 26# codegay


    无规律清空是因为我偷懒没用数据库 导致多人请求时同时写文件挂掉
Happy应该知道

TOP

本帖最后由 523066680 于 2017-7-8 17:01 编辑

清零了?

写了一段代码查看赛跑情况
  1. use JSON;
  2. use Encode;
  3. use Try::Tiny;
  4. use Data::Dumper;
  5. use HTTP::Headers;
  6. use Time::HiRes qw/time sleep/;
  7. use IO::Handle;
  8. STDOUT->autoflush(1);
  9. use LWP::Simple;
  10. use LWP::UserAgent;
  11. our $user    = "vic3";
  12. our $website = 'http://bbaass.tk/math/';
  13. our ($user, $website, $headers);
  14. my ( $min, $max ) = (0, 100);
  15. my $test = int(($max + $min) / 2);
  16. my $data;
  17. our $ua = LWP::UserAgent->new( agent => 'Mozilla/5.0', timeout => 5 );
  18. our $res;
  19. my %ever;
  20. my %current;
  21. getData( \%ever );
  22. my $count = 0;
  23. while (1)
  24. {
  25.     getData(\%current);
  26.     $count = 0;
  27.     for my $k (reverse sort { $ever{$a} <=> $ever{$b} } keys %ever)
  28.     {
  29.         printf "%-10s %d + %d\n", $k, $ever{$k}, $current{$k} - $ever{$k};
  30.         last if ($count++ > 3);
  31.     }
  32.     print "\n";
  33.     sleep 10.0;
  34. }
  35. sub getData
  36. {
  37.     our $res;
  38.     my $href = shift;
  39.     my $data;
  40.     while (1)
  41.     {
  42.         $res = $ua->post( $website, [ username => $user, send => 'reg' ] );
  43.         $res = $ua->post( $website, [ username => $user, send => 'user' ] );
  44.         try { $data = decode_json( $res->content ); last; }
  45.         catch { sleep 2.0; printf "repeat\n" }
  46.     }
  47.     for my $e ( @{$data->{'user'}} )
  48.     {
  49.         ( $times, $name, $state ) = @$e;
  50.         $href->{$name} = $times;
  51.     }
  52. }
复制代码
  1. vic3       0 + 0
  2. bbaa       0 + 0
  3. vic        0 + 0
  4. vic2       55 + 10
  5. codegay    75 + 11
  6. vic3       0 + 0
  7. bbaa       0 + 0
  8. vic        0 + 0
  9. vic2       55 + 11
  10. codegay    75 + 11
  11. vic3       0 + 0
  12. bbaa       0 + 0
  13. vic        0 + 0
  14. vic2       55 + 12
  15. codegay    75 + 12
复制代码
1

评分人数

TOP

回复 26# codegay

把细节都考虑进去了,如果把user-agent修改为火狐浏览器,就好了。这个php服务器对py的请求会拒绝,只能伪造user-agent来实现高速和稳定的请求。

TOP

以下是模仿了happy和ro的程序写的。经过几次修改,应该是能比较长时间持续运行了。
这个网站一言不合就返回500错误或者无规律清空数据,在刚开始很困扰,很懵B。

后来长时间运行发现,也有可能极小概率请求后返回404或者跳转到首页。所以也必须要在关键代码上处理错误。
→_→代码丑。但是管用。
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on 2017-07-02 13:57:56
  4. @author: codegay
  5. python3 & 编辑器 == spyder
  6. """
  7. import requests
  8. import time
  9. apiurl = "http://bbaass.tk/math/"
  10. s = 0
  11. username = "codegay"
  12. data = {
  13.         'send': 'Answer',
  14.         'username': username,
  15.         'math': 0,
  16.         }
  17. def reg(username="codegay"):
  18.     data = {"send": "reg", "username": username}
  19.     try:
  20.         requests.post(apiurl, data=data)
  21.     except:
  22.         global s
  23.         s += 1
  24.         print("reg程序江化,错误+1s")
  25.         time.sleep(2)
  26. def answer(min=0, max=100):
  27.     answering = True
  28.     answercounter = 0
  29.     token = ''
  30.     global s
  31.     while answering:
  32.         math = data['math'] = round((min+max)/2)
  33.         try:
  34.             time.sleep(0.3)
  35.             post = requests.post(apiurl, data=data, timeout=6)
  36.             print(post.text)
  37.         except Exception as err:
  38.             s += 1
  39.             print(err)
  40.             print("程序江化,错误+1s", "    错误总次数:", s)
  41.             time.sleep(1)
  42.         else:
  43.             answercounter += 1
  44.             print("数字:", math, "    counter:", answercounter)
  45.             re = ''
  46.             if post.status_code == 500:
  47.                 reg()
  48.                 time.sleep(1)
  49.             elif post.status_code == 200:
  50.                 try:
  51.                     result = post.json()
  52.                 except:
  53.                     answering = False
  54.                     continue
  55.                 re = result['re']
  56.                 if token and token != result['tokens']:
  57.                     answering = False
  58.                     continue
  59.                 token = result['tokens']
  60.                 if re == '=':
  61.                     answering = False
  62.                 if re == ">":
  63.                     max = data['math']
  64.                 if re == "<":
  65.                     min = data['math']
  66.             else:
  67.                 s += 1
  68.                 print("远程目标服务器程序江化,错误+1s")
  69.                 time.sleep(1)
  70. reg()
  71. while True:
  72.     answer()
复制代码
2

评分人数

去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 24# reKonquer


    同志,你再不开我就超了你哈~

TOP

本帖最后由 reKonquer 于 2017-7-2 18:49 编辑

回复 1# bbaa


    来个高级的 用到了okhttp,gson
  1. package com.rekonquer.math;
  2. import com.google.gson.Gson;
  3. import okhttp3.*;
  4. import java.io.IOException;
  5. /**
  6. * Author: MagicDroidX
  7. */
  8. public class Main {
  9.     public static OkHttpClient HTTP_CLIENT;
  10.    
  11.     public static String token = null;
  12.     public static int min = 1;
  13.     public static int num = 50;
  14.     public static int max = 100;
  15.     public static void main(String[] args) throws IOException {
  16.         HTTP_CLIENT = new OkHttpClient.Builder()
  17.                 .build();
  18.         while (true) {
  19.             AnswerRequest request = new AnswerRequest();
  20.             request.math = num;
  21.             Response response = HTTP_CLIENT.newCall(
  22.                     new Request.Builder()
  23.                             .url("http://bbaass.tk/math/index.php")
  24.                             .post(new FormBody.Builder()
  25.                                     .add("send", "Answer")
  26.                                     .add("username", "reKonquer")
  27.                                     .add("math", String.valueOf(num))
  28.                                     .build()
  29.                             )
  30.                             .build()
  31.             ).execute();
  32.             if (!response.isSuccessful()) {
  33.                 continue;
  34.             }
  35.             AnswerResponse answer;
  36.             try {
  37.                answer = new Gson().fromJson(response.body().string(), AnswerResponse.class);
  38.             } catch (Exception e) {
  39.                 continue;
  40.             }
  41.             if (answer == null) {
  42.                 continue;
  43.             }
  44.             if (token == null || token.equals(answer.tokens)) {
  45.                 token = answer.tokens;
  46.                 switch (answer.re) {
  47.                     case ">": {
  48.                         System.out.println(num + " 小了");
  49.                         max = num;
  50.                         break;
  51.                     }
  52.                     case "<": {
  53.                         System.out.println(num + " 大了");
  54.                         min = num;
  55.                         break;
  56.                     }
  57.                     case "=":
  58.                     default: {
  59.                         System.out.println("正确答案:" + num);
  60.                         token = null;
  61.                         continue;
  62.                     }
  63.                 }
  64.                 num = (int) ((min + max) / 2d);
  65.             } else {
  66.                 if (answer.re.equals("=")) {
  67.                     System.out.println("正确答案:" + num);
  68.                 }
  69.                 System.out.println("新的一局:" + token + " => " + answer.tokens);
  70.                 min = 1;
  71.                 max = 100;
  72.                 num = 50;
  73.                 token = answer.tokens;
  74.                 continue;
  75.             }
  76.         }
  77.     }
  78. }
  79. package com.rekonquer.math;
  80. /**
  81. * Author: MagicDroidX
  82. */
  83. public class AnswerResponse {
  84.     public int code;
  85.     public String re;
  86.     public String tokens;
  87. }
复制代码
网站崩了,本来能超过第一的
2

评分人数

    • codegay: 少年筋骨精奇,写得一手漂亮程序。技术 + 1
    • 老刘1号: 不明嚼栗技术 + 1

TOP

返回列表