Skip to content

Commit

Permalink
Обход ratelimit с помощью /hit
Browse files Browse the repository at this point in the history
  • Loading branch information
saber-nyan committed Jul 5, 2020
1 parent edc7f5d commit 29a1f4c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 9 deletions.
20 changes: 19 additions & 1 deletion ImagePoster4DTF/DtfClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,24 @@ public string GetCookie() {
return cookie?.Value;
}

public async Task HitRandomPost() {
var success = false;
while (!success) {
var randomId = new Random().Next(100000, 165971);
try {
await _client.Request($"https://dtf.ru/hit/{randomId}")
.PostUrlEncodedAsync(new Dictionary<string, string> {
{"mode", "raw"}
})
.ReceiveString();
success = true;
}
catch (Exception e) {
Log.Warning(e, $"Failed to hit post {randomId}, retrying: ");
}
}
}

public async Task<JObject> LoginWithCookie(string cookie) {
Log.Debug($"Logging in w/ cookie len = {cookie.Length}");
_client.WithCookie("osnova-remember", cookie);
Expand Down Expand Up @@ -154,7 +172,7 @@ public async Task<JObject> CreatePost() {
.GetAsync()
.ReceiveString();
var writingJson = ParseAndCheckJson(writingResponse);
Log.Debug($"Writing sent (post created): {writingJson}");
// Log.Debug($"Writing sent (post created): {writingJson}");
if (writingJson.ContainsKey("module.auth")) return writingJson["module.auth"] as JObject;

Log.Error("module.auth is not found in response jsons");
Expand Down
19 changes: 11 additions & 8 deletions ImagePoster4DTF/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -432,35 +432,38 @@ private async void FireButton_OnClick(object sender, RoutedEventArgs ev) {
_uploadProgressBar.Value = 0;
_uploadProgressBar.Maximum = files.Count;
var errors = 0;
foreach (var file in files)
foreach (var file in files) {
for (var i = 0; i < 3 && !file.Success; i++) {
Log.Debug($"Uploading {file} try #{i}...");
try {
var uploadResponse = await DtfClient.UploadFile(file.Path, file.Mimetype);
var result = (JObject) uploadResponse["result"][0];
file.ResultJson = result;
if ((string) result["type"] == "error") {
if (result["data"].Contains("error_text")
&& ((string) result["data"]["error_text"]).Contains("Слишком много действий")) {
Log.Information("Ratelimited, sleeping 2 secs!");
await Task.Delay(2000);
if (((string) result["data"]["error_text"]).Contains("Слишком много действий")) {
Log.Information("Ratelimited, sleeping 15 secs!");
await Task.Delay(15000);
i = 0; // Does not count as error

for (var j = 0; j < 5; j++) await DtfClient.HitRandomPost();
}

throw new ApplicationException("Не удалось загрузить файл.");
}

file.Success = true;
Log.Debug("...done.");
await Task.Delay(334); // 3 requests per second
}
catch (Exception e) {
Log.Error(e, "...failed:");
}
}

if (!file.Success) errors += 1;
if (!file.Success) errors += 1;

_uploadProgressBar.Value += 1;
}
_uploadProgressBar.Value += 1;
}

var successfullyUploaded = (files.Count - errors).ToString();

Expand Down

0 comments on commit 29a1f4c

Please sign in to comment.