目标:访问任何一个网站(C#,HTTP)
1. 创建一个Windows窗体项;
2. 设置UI界面;
在Form1里面加入一个Label,一个Button和两个TextBox,将第二个TextBox的Multiline属性改为True;
3. 在Form窗体上点击右键,选“查看代码”(或者直接按F7也可以); ----上代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net;
namespace catchANDaccessWeb
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
byte[] buf = new byte[38192];
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(textBox1.Text);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
int count = resStream.Read(buf,0,buf.Length);
textBox2.Text = Encoding.UTF8.GetString(buf, 0, count);
webBrowser1.Navigate(textBox1.Text);
resStream.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
我们的目标就是抓取网页的内容,并且在textBox2控件中显示HTML代码;抓取网页的内容,显示到webBrowser1控件中;
开始我们创建了一个buf数组来存储请求返回的结果(内容是网页的HTML代码),其中数组的大小与我们请求的数据大小有关系。然后我们实例化了一个HttpWebRequest 类的request 对象,它来存储我们要请求的URL地址。而WebRequest.Create(textBox1.Text)方法返回的是WebRequest类型的对象,所以我们要对它进行类型转换成HttpWebRequest类型,并且赋值给request对象。而对于HttpWebRequest类对象,我们可以用GetResponse()方法来返回一个WebResponse对象,同理进行类型转换成HttpWebResponse;
如果前面的request和response有点乱可以这样看;
//webRequest webRequest1 = new WebRequest(); 这样实例化不可以,因为WebRequest是抽象类接口 同理WebResponse也不能实例化
WebRequest webRequest = WebRequest.Create(textBox1.Text);
HttpWebRequest request = (HttpWebRequest)webRequest;
WebResponse webResponse = request.GetResponse();
HttpWebResponse response = (HttpWebResponse)webResponse;
先创建WebRequest对象webRequest来存储URL的地址信息,然后进行类型转换成HttpWebRequest对象;同理response对象也是如此操作。
然后我们就可以使用response对象的GetResponseStream()方法来返回得到一个文本流,最后用Stream对象的Read()方法把返回的字节放到新建的int型变量中,这里Read()方法有三个,分别为:要放入的字节数组,字节数组的开始位置(偏移量),字节数组的长度。之后我们把Read()方法存储在count对象中(因为Read()方法的返回值是int型)。之后我们把获得的信息写在textBox2控件上,这里GetString()方法也有三个参数,分别为:要解码的字节数组,第一个要解码的字节索引,要解码的字节数。并且我们要将URL地址的全部信息加载到webBrowser1控件中,使用Navigate()方法即可。然后最最重要的一点别忘了关闭数据流。
程序演示:
- PS:这就是我们程序的演示结果,但是有点问题,浏览器的不兼容会出现一些错误。