- Регистрация
- 09.10.2015
- Сообщения
- 3 916
- Благодарностей
- 3 865
- Баллы
- 113
Быть может, кто-то уже реализовывал похожий функционал для задачи быстрой проверки на 404 ошибку огромного списка URL'ов?
По сути, нужно только получить первые 11-14 байт от сервера и закрыть соединение (этого должно быть достаточно чтоб получить первую строку с кодом ответа). Получать целиком весь HEAD - нет особого смысла, т.к. ссылок много и нужно лишь узнать: 404 / 200 или любой другой код отдал сервер на наш запрос.
Начал сам пытаться реализовать это через `HttpWebRequest` в C#, но т.к. я с ним не работал и всегда предпочитал "синтаксический сахар" от ZennoLab (`ZennoPoster.HttpGet`), то сейчас "прикурил" от того, что не могу вместе реализовать:
- HTTP HEAD запрос
- установка своего User-Agent
- передача произвольного header в запросе
- использование proxy (лучше socks5)
- ответ может быть в gzip / deflate / Brotli (br)
- TSL 1.2 (вроде бы именно его не умеет ZP через свой кубик Http Get, если не путаю)
- чтение только N байт ответа сервера
Буду очень благодарен, если у кого-то в закромах есть C# код, который поможет решить эту задачу, а то я уже немного устал собирать это по частям из гугла Уже даже кажется, что нужно использовать что-то другое, а не `HttpWebRequest`.
PS: в C# не тестировал на сколько быстро читать первые N байт ответа, а не весь header целиком. Но помню, что то ли в php, то ли в python такой подход несколько лет назад уменьшил мне длительность парсинга в пару раз.
PPS: если кто-то ещё покажет дополнительно как лучше распараллелить такую задачу, то будет вообще здорово. Явно это кому-то в будущем поможет Мне в голову приходит только `Parallel.For`/`Parallel.ForEach`, но скорее всего это не очень корректно в данном конкретном случае.
По сути, нужно только получить первые 11-14 байт от сервера и закрыть соединение (этого должно быть достаточно чтоб получить первую строку с кодом ответа). Получать целиком весь HEAD - нет особого смысла, т.к. ссылок много и нужно лишь узнать: 404 / 200 или любой другой код отдал сервер на наш запрос.
Начал сам пытаться реализовать это через `HttpWebRequest` в C#, но т.к. я с ним не работал и всегда предпочитал "синтаксический сахар" от ZennoLab (`ZennoPoster.HttpGet`), то сейчас "прикурил" от того, что не могу вместе реализовать:
- HTTP HEAD запрос
- установка своего User-Agent
- передача произвольного header в запросе
- использование proxy (лучше socks5)
- ответ может быть в gzip / deflate / Brotli (br)
- TSL 1.2 (вроде бы именно его не умеет ZP через свой кубик Http Get, если не путаю)
- чтение только N байт ответа сервера
Буду очень благодарен, если у кого-то в закромах есть C# код, который поможет решить эту задачу, а то я уже немного устал собирать это по частям из гугла Уже даже кажется, что нужно использовать что-то другое, а не `HttpWebRequest`.
PS: в C# не тестировал на сколько быстро читать первые N байт ответа, а не весь header целиком. Но помню, что то ли в php, то ли в python такой подход несколько лет назад уменьшил мне длительность парсинга в пару раз.
PPS: если кто-то ещё покажет дополнительно как лучше распараллелить такую задачу, то будет вообще здорово. Явно это кому-то в будущем поможет Мне в голову приходит только `Parallel.For`/`Parallel.ForEach`, но скорее всего это не очень корректно в данном конкретном случае.
Последнее редактирование: