После того, как я отправил около 1500-1700 веб-запросов (всегда в этом диапазоне), я получаю следующую ошибку:
TlsException: Handshake failed - error code: UNITYTLS_INTERNAL_ERROR, verify result: UNITYTLS_X509VERIFY_NOT_DONE
Перезапуск Unity «обновляет» квоту, и я могу снова отправлять примерно такое же количество запросов.
Я создаю webscraper, и мне нужно отправить около 14000 запросов.
Между каждым запросом происходит задержка, и я отправляю максимум 5 одновременно, чтобы избежать перегрузки сервера.
Я также попробовал следующий веб-сайт для тестирования, но получил ту же ошибку:
https://httpbin.org/
Вот мой HttpClient:
private static readonly Lazy httpClient = new(() => new HttpClient(new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (_, _, _, _) => true,
ClientCertificateOptions = ClientCertificateOption.Automatic,
SslProtocols = SslProtocols.None
})
{
BaseAddress = new Uri("https://yugioh.fandom.com/"),
Timeout = TimeSpan.FromSeconds(HTTPCLIENT_TIMEOUT),
DefaultRequestHeaders =
{
ConnectionClose = true
}
});
Изменение настроек в HttpClient (или отсутствие пользовательских настроек вообще) не решает проблему.
Я читал, что UnityWebRequest может не быть этих проблем, но его можно вызвать только из основного потока, и я не хочу реструктурировать все для использования сопрограмм.
РЕДАКТИРОВАТЬ:Вот код, который я использую для отправки запросов и чтения потока контента.
internal static async Task DownloadAsync(URL _URL, Func _ProcessLine, Func _StopCondition, CancellationToken _CancellationToken)
{
using var _cancellationTokenSource = new CancellationTokenSource();
using var _linkedCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(_CancellationToken, _cancellationTokenSource.Token);
var (_statusCode, _contentStream) = await DownloadAsStreamAsync(_URL, _linkedCancellationTokenSource.Token);
if (_contentStream == null)
{
return _statusCode;
}
using (var _streamReader = new StreamReader(_contentStream))
{
while (await _streamReader.ReadLineAsync() is {} _currentLine)
{
await _ProcessLine(_currentLine);
if (_StopCondition())
{
_cancellationTokenSource.Cancel();
return CustomHttpStatusCode.Stopped;
}
}
}
return _statusCode;
}
private static async Task DownloadAsStreamAsync(URL _URL, CancellationToken _CancellationToken)
{
var _semaphoreAcquired = false;
var _attempt = 1;
var _httpStatusCode = CustomHttpStatusCode.Null;
Stream? _contentStream = null;
do
{
try
{
await Task.Delay(1000, _CancellationToken);
await semaphoreSlim.Value.WaitAsync(_CancellationToken);
_semaphoreAcquired = true;
// I can't add a "using" here since the stream would already be disposed when i try to access it in "DownloadAsync".
var _response = await httpClient.Value.GetAsync(_URL.AbsoluteUri, HttpCompletionOption.ResponseHeadersRead, _CancellationToken);
_httpStatusCode = _response.EnsureSuccessStatusCode().StatusCode.ToCustomHttpStatusCode();
_contentStream = await _response.Content.ReadAsStreamAsync();
return (_httpStatusCode, _contentStream);
}
catch (TaskCanceledException) when (_CancellationToken.IsCancellationRequested) { /* Expected behavior. */ }
catch (Exception _exception)
{
Debug.LogException(_exception.CustomMessage($"Download attempt [{_attempt}] aborted: {_URL.Bold()} [{_httpStatusCode}]"));
await Task.Delay(5000 * _attempt++, _CancellationToken);
}
finally
{
if (_semaphoreAcquired)
{
semaphoreSlim.Value.Release();
}
}
} while (!_CancellationToken.IsCancellationRequested && _attempt
Подробнее здесь: https://stackoverflow.com/questions/790 ... b-requests
TlsException: не удалось выполнить рукопожатие после отправки нескольких веб-запросов ⇐ C#
Место общения программистов C#
1729034314
Anonymous
После того, как я отправил около 1500-1700 веб-запросов (всегда в этом диапазоне), я получаю следующую ошибку:
TlsException: Handshake failed - error code: UNITYTLS_INTERNAL_ERROR, verify result: UNITYTLS_X509VERIFY_NOT_DONE
Перезапуск Unity «обновляет» квоту, и я могу снова отправлять примерно такое же количество запросов.
Я создаю webscraper, и мне нужно отправить около 14000 запросов.
Между каждым запросом происходит задержка, и я отправляю максимум 5 одновременно, чтобы избежать перегрузки сервера.
Я также попробовал следующий веб-сайт для тестирования, но получил ту же ошибку:
https://httpbin.org/
Вот мой HttpClient:
private static readonly Lazy httpClient = new(() => new HttpClient(new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (_, _, _, _) => true,
ClientCertificateOptions = ClientCertificateOption.Automatic,
SslProtocols = SslProtocols.None
})
{
BaseAddress = new Uri("https://yugioh.fandom.com/"),
Timeout = TimeSpan.FromSeconds(HTTPCLIENT_TIMEOUT),
DefaultRequestHeaders =
{
ConnectionClose = true
}
});
Изменение настроек в HttpClient (или отсутствие пользовательских настроек вообще) не решает проблему.
Я читал, что UnityWebRequest может не быть этих проблем, но его можно вызвать только из основного потока, и я не хочу реструктурировать все для использования сопрограмм.
[b]РЕДАКТИРОВАТЬ:[/b]Вот код, который я использую для отправки запросов и чтения потока контента.
internal static async Task DownloadAsync(URL _URL, Func _ProcessLine, Func _StopCondition, CancellationToken _CancellationToken)
{
using var _cancellationTokenSource = new CancellationTokenSource();
using var _linkedCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(_CancellationToken, _cancellationTokenSource.Token);
var (_statusCode, _contentStream) = await DownloadAsStreamAsync(_URL, _linkedCancellationTokenSource.Token);
if (_contentStream == null)
{
return _statusCode;
}
using (var _streamReader = new StreamReader(_contentStream))
{
while (await _streamReader.ReadLineAsync() is {} _currentLine)
{
await _ProcessLine(_currentLine);
if (_StopCondition())
{
_cancellationTokenSource.Cancel();
return CustomHttpStatusCode.Stopped;
}
}
}
return _statusCode;
}
private static async Task DownloadAsStreamAsync(URL _URL, CancellationToken _CancellationToken)
{
var _semaphoreAcquired = false;
var _attempt = 1;
var _httpStatusCode = CustomHttpStatusCode.Null;
Stream? _contentStream = null;
do
{
try
{
await Task.Delay(1000, _CancellationToken);
await semaphoreSlim.Value.WaitAsync(_CancellationToken);
_semaphoreAcquired = true;
// I can't add a "using" here since the stream would already be disposed when i try to access it in "DownloadAsync".
var _response = await httpClient.Value.GetAsync(_URL.AbsoluteUri, HttpCompletionOption.ResponseHeadersRead, _CancellationToken);
_httpStatusCode = _response.EnsureSuccessStatusCode().StatusCode.ToCustomHttpStatusCode();
_contentStream = await _response.Content.ReadAsStreamAsync();
return (_httpStatusCode, _contentStream);
}
catch (TaskCanceledException) when (_CancellationToken.IsCancellationRequested) { /* Expected behavior. */ }
catch (Exception _exception)
{
Debug.LogException(_exception.CustomMessage($"Download attempt [{_attempt}] aborted: {_URL.Bold()} [{_httpStatusCode}]"));
await Task.Delay(5000 * _attempt++, _CancellationToken);
}
finally
{
if (_semaphoreAcquired)
{
semaphoreSlim.Value.Release();
}
}
} while (!_CancellationToken.IsCancellationRequested && _attempt
Подробнее здесь: [url]https://stackoverflow.com/questions/79060076/tlsexception-handshake-failed-after-sending-a-bunch-of-web-requests[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия