HTML oldal lekérése C#-ban

HTML oldal lekérése C#-ban
2009-02-08T20:08:06+01:00
2009-02-10T17:03:51+01:00
2022-11-12T14:10:36+01:00
Tigermaster
Helló!
Az lenne a problémám, hogy most kezdtem el a hálózati programozást C#-ban(sajnos nem valami sok anyagot találtam C#-ra, amiből elindulhatnék), és ezt a forráskódot találtam(amit tanulmányozhatnék tanulás céljából), és a sima oldalak(pl.: google.com) html kódját le is szedi, azonban, ha egy aloldal(pl.: populous.extra.hu/index.htm) címét adom meg neki, akkor ilyen hibával kilép:
An unhandled exception of type 'System.Net.Sockets.SocketException' occurred in System.dll

Additional information: A kért név érvényes és megtalálható az adatbázisban, de nincs meg a megfelelő hozzárendelt feloldandó adat

kód:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; namespace netes { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { IPHostEntry IPHost = Dns.Resolve(textBox1.Text); box.Text += (IPHost.HostName) + "\n\n\n"; string[] aliases = IPHost.Aliases; IPAddress[] addr = IPHost.AddressList; box.Text += (addr[0]) + "\n\n\n"; EndPoint ep = new IPEndPoint(addr[0], 80); Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.Connect(ep); if (sock.Connected) box.Text += ("OK") + "\n\n\n"; Encoding ASCII = Encoding.ASCII; string Get = "GET / HTTP/1.1\r\nHost: " + textBox1.Text + "\r\nConnection: Close\r\n\r\n"; Byte[] ByteGet = ASCII.GetBytes(Get); Byte[] RecvBytes = new Byte[256]; sock.Send(ByteGet, ByteGet.Length, 0); Int32 bytes = sock.Receive(RecvBytes, RecvBytes.Length, 0); box.Text += (bytes) + "\n\n\n"; String strRetPage = null; strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes); while (bytes > 0) { bytes = sock.Receive(RecvBytes, RecvBytes.Length, 0); strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes); //box2.Text += strRetPage; } box2.Text += strRetPage; box2.Text += "\nVÉGE"; sock.Shutdown(SocketShutdown.Both); sock.Close(); } private void button3_Click(object sender, EventArgs e) { box.Text = ""; box2.Text = ""; } } }
Mi lehet a probléma, az aloldalakat miért nem tudja lekérni? Ha esetleg valaki tudna egy pár jó linket a hálózati programozáshoz c#-ban, amivel a kezdetektől meg lehet tanulni ezt, nagyon megköszönném(egy pár éve már programozok, de a hálózati programozásban még nincs semmi tapasztalatom.
Mutasd a teljes hozzászólást!
Azért nem kezeli, mert a HTTP protokoll nem úgy működik, ahogy te használni próbálod. Ha van egy olyan linked, hogy http://www.oldalneve.hu/aloldal/lap.html akkor ezt egy hasonló formában kellene lekérdezni.
GET /aloldal/lap.html HTTP/1.1 Host: www.oldalneve.hu
Te ehelyett mindig csak egy /-t írsz a GET után, és a Host részben próbálod megadni az egész oldalt. A HTTP protokollról pl. a w3.org oldalon olvashatsz bővebben.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd