Можно ли только прочитать и вернуть часть HttpWebResponse.GetResponseStream?
Я искал везде, и я не могу найти ни одного места, которое бы отвечало мне за это... Было бы здорово, если бы кто-нибудь мог помочь.
В общем, я недавно создал программу на C#, которая должна проверять определенные части исходного кода сайта и возвращать URL-адрес при определенном совпадении. Что я сделал до сих пор, так это то, что я перебрал код с помощью цикла while, в зависимости от переменной (member_id), которая увеличивается в каждом цикле (если совпадение не найдено). При каждом цикле исходный код также считывается с веб-сайта домена / профиля / + member_id (где веб-сайт - это имя веб-сайта, очевидно), и его содержимое проверяется на возможные совпадения.
Тем не менее, главная проблема с этим методом заключается в том, что он занимает слишком много времени. Я подсчитал, что если я буду сканировать веб-сайт, используя мой текущий метод, это займет около недели (есть 500 000 страниц, которые я хочу просмотреть. Я не ожидаю, что это будет быстро, но давай...). Мой вопрос в том, есть ли способ решить это? Мне нужна только небольшая, небольшая часть исходного кода с каждой страницы (только head-элемент), поэтому мне кажется немного ненужным читать все остальное, а также.
Вот код, который я сейчас получил (*website* и *match* - это действительно что-то другое):
using System;
using System.Net;
using System.Text;
using System.IO;
static void Main()
{
int member_id = 1;
while (member_id < 486252) // will change to non-constant value later
{
string URL = "http://*website*/profile/" + member_id;
StringBuilder content = new StringBuilder();
byte[] b = new byte[310]; // non-constant value will come later...
HttpWebRequest req = (HttpWebRequest) WebRequest.Create(URL);
HttpWebResponse res = (HttpWebResponse) req.GetResponse();
Stream response = res.GetResponseStream();
int x;
string translated;
do
{
x = response.Read(b, 0, b.Length);
if (x != 0)
{
content.Append(Encoding.ASCII.GetString(b, 0, x));
}
} while (x > 0);
member_id++;
if (content.ToString().Contains("<title>*Match*</title>"))
{
Console.WriteLine("Match has been found!"); // Just for debugging
member_id = 500000; // Lazy, temporary method
}
Console.WriteLine(content.ToString()); // Just for debugging
Console.WriteLine(content.ToString().Length); // Just for debugging
Console.ReadKey(); // Also just for debugging
}
}
Я пытался возиться с размером массива b, параметрами Read и параметрами GetString. Ничего из этого не сработало, хотя я и этого не ожидал. Прямо сейчас я отчаянно нуждаюсь в решении, чтобы быть честным.
Я получил часть, которая на самом деле находит исходный код из учебника, с несколькими личными изменениями. Я начал с C# вчера, хотя некоторое время работал с C++ и некоторыми другими языками (например, PHP). Но в целом мои знания довольно просты, когда дело доходит до программирования, так что будьте понимающими.
Спасибо за прочтение.