Я делаю функцию DownloadString для извлечения данных HTML (поскольку веб-клиенту не хватает скорости = /)
Вот что у меня есть ...
public static string DownloadString(string url)
{
TcpClient client = new TcpClient();
client.Client.ReceiveTimeout = 5;
string dns = UrlToDNS(url);
byte[] buffer = new byte[51200];
client.Client.Connect(dns, 80);
string getVal = url.Substring(url.IndexOf(dns) + dns.Length);
string HTTPHeader = "GET " + getVal + " HTTP/1.1\nHost: " + dns + "\nConnection: close\nUser-Agent: Pastebin API 0.1\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\nAccept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\nCache-Control: no-cache\nAccept-Language: en;q=0.7,en-us;q=0.3\n\n";
client.Client.Send(s2b(HTTPHeader));
client.Client.Receive(buffer);
return b2s(buffer);
}
private static string b2s(byte[] ba)
{
string ret = "";
foreach (byte b in ba)
ret += Convert.ToChar(b);
return ret;
}
(s2b не требуется, так как http-сервер возвращает OK)
Однако, когда я запускаю код (с http://www.google.com/ в качестве теста), кажется, что некоторые данные отбрасываются / не читаются:
HTTP/1.1 200 OK
Date: Sat, 20 Aug 2011 15:18:28 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=3714446c9ffb56bf:FF=0:TM=1313853508:LM=1313853508:S=mu1XpTcwqFTwgwJM; expires=Mon, 19-Aug-2013 15:18:28 GMT; path=/; domain=.google.com
Set-Cookie: NID=50=B8YKlYj7eK84obqC5YO10AKF9jJNcQ5w4NkzidRL9of0Sc24EpbWeP-w7HVfm-eBCfE2NX2QMZAfEBpsqsgjhWqylFUIXU-bs6ObkLQbXJ59sa_daivfBLYJkQvq_WH; expires=Sun, 19-Feb-2012 15:18:2>8 GMT; path=/; domain=.google.com; HttpOnly
Server: gws
X-XSS-Protection: 1; mode=block
Connection: close
<!doctype html><html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><meta name="description" content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for."><meta name="robots" content="noodp"><title>Google</title><script>window.google={kEI:"RNBPTvPcI5C_gQeywpHfBg",getEI:function(a){var b;while(a&&!(a.getAttribute&&(b=a.getAttribute("eid"))))a=a.parentNode;return b||google.kEI},kEXPI:"28936,29049,29774,30465,30542,31760",kCSI:{e
Чтобы добавить еще одну сложность, кажется, каждый раз отбрасывает переменное количество данных; Я не получил согласованных результатов с тем, сколько данных потеряно, иногда они теряют только небольшое количество, а иногда (как в примере) большее количество
Есть идеи о том, что вызывает это? (или лучший способ получения исходного кода веб-страницы без WebClient)
(также игнорируйте тот факт, что входные и выходные данные не были обработаны)