如何使用 WebClient 登录一个页面?

jiangjunguo 2011-01-22 08:38:49
登录连接: http://www.metin2.org/user/login/index.php

用软件侦测 浏览器提交 username=Ncapoemchl&password=cdk890901&SubmitLoginForm=Gönder

请问WebClient 代码应该如何写?
...全文
348 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangjunguo 2011-01-22
  • 打赏
  • 举报
回复
找了另外一段代码,可以正常运行。 如何知道登录是成功?还失败? 我是新手,求高人指点。

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.IO;


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string Txt = "";
string UserName = "Ncapoemchl";
string UserPwd = "cdk890901";
String LoginUrl = "http://www.metin2.org/user/login/index.php";
Login(UserName, UserPwd, LoginUrl, out Txt);

//获取登录后的页面数据
textBox2.Text = Txt;

//判断该页面数据是否是登陆后的数据就可以判断是否登录成功了
//由于都是字符串操作就没有必要写了呵呵
}

public void Login(string UserName, string UserPwd, string LoginUrl, out string Txt)
{
try
{
//定义Cookie容器
CookieContainer CookieArray = new CookieContainer();

//创建Http请求
HttpWebRequest LoginHttpWebRequest = (HttpWebRequest)WebRequest.Create(LoginUrl);

//登录数据
string LoginData = "username=" + UserName + "&password=" + UserPwd + "&SubmitLoginForm=Gönder";
//数据被传输类型
LoginHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
//数据长度
LoginHttpWebRequest.ContentLength = LoginData.Length;
//数据传输方法 get或post
LoginHttpWebRequest.Method = "POST";
//设置HttpWebRequest的CookieContainer为刚才建立的那个CookieArray
LoginHttpWebRequest.CookieContainer = CookieArray;
//获取登录数据流
Stream myRequestStream = LoginHttpWebRequest.GetRequestStream();
//StreamWriter
StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.Default);
//把数据写入HttpWebRequest的Request流
myStreamWriter.Write(LoginData);


//关闭打开对象
myStreamWriter.Close();

myRequestStream.Close();

//新建一个HttpWebResponse
HttpWebResponse myHttpWebResponse = (HttpWebResponse)LoginHttpWebRequest.GetResponse();

//获取一个包含url的Cookie集合的CookieCollection
myHttpWebResponse.Cookies = CookieArray.GetCookies(LoginHttpWebRequest.RequestUri);

WebHeaderCollection a = myHttpWebResponse.Headers;

Stream myResponseStream = myHttpWebResponse.GetResponseStream();

StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.Default);

Txt = myStreamReader.ReadToEnd();


//把数据从HttpWebResponse的Response流中读出
myStreamReader.Close();

myResponseStream.Close();
}
catch (Exception ex)
{
throw ex;
}
}

}

}
jiangjunguo 2011-01-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]

添加WEB引用
using System.Web;
[/Quote]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Web;
我已经加了啊,我也很奇怪为什么这里会报错。
wuyq11 2011-01-22
  • 打赏
  • 举报
回复
添加WEB引用
using System.Web;
jiangjunguo 2011-01-22
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Web;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string url = "http://www.metin2.org/user/login/index.php";
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.Method = "POST ";//POST方式请求
req.ContentType = "application/x-www-form-urlencoded ";//内容类型
string para;
para = HttpUtility.UrlEncode("userid ") + "= " + HttpUtility.UrlEncode("");
//这里为什么会报上下文不存在名称 HttpUtility ?
para += "& ";
para += HttpUtility.UrlEncode("passwd ") + "= " + HttpUtility.UrlEncode("");

}

}
}
wuyq11 2011-01-22
  • 打赏
  • 举报
回复
用httpwebrequest和response类
System.Net.HttpWebRequest req=(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
req.Method= "POST ";//POST方式请求
req.ContentType= "application/x-www-form-urlencoded ";//内容类型
string para;
para=System.Web.HttpUtility.UrlEncode( "userid ") + "= "+System.Web.HttpUtility.UrlEncode("");
para+= "& ";
para+=System.Web.HttpUtility.UrlEncode( "passwd ")+ "= "+System.Web.HttpUtility.UrlEncode( "");
开发初衷:为能演示更多的WEB组件,所以写该程序时更多在于考虑能使用到不同组件实现各个功能,所以对各组件的没能展现得较深入。另外由于是利用业余时间所以写得比较仓促,未能演示到利用SOCKET实现的HTTP协议,只利用HttpWebRequest和HttpWebResponse来代替了HTTP协议封装和解吸。 开发平台: VB.NET 2005 实现的功能: 1.显示选中区域代码:使用WebBrowser,为用户分析所选中的WEB对象相对应代码。协助定位代码分析。 2.显示当前对象信息:使用WebBrowser,分析当前的用户操作焦点所在的WEB对象信息。协助自动操作。 3.显示所有对象信息:使用WebBrowser,分析页面的所有WEB对象信息。 协助定位代码分析。 4.自动登陆:使用WebBrowser,结合..\LoginScript\Script.txt自定义脚本,对指定页面做相应的自动操作。协助自动操作网页。 5.执行脚本:使用WebBrowser,动态向页面嵌入自定义的WEB脚本,对指定页面做相应的自动操作。协助自动操作网页。 6.数据抓取:使用WebBrowser和API,对页面的资源文件做分析,下载到本地并本地化该HTML代码。再利用API重IE缓冲区拷贝对应资源文件到指定目录。 7.页面变化监控:使用HttpWebRequest和HttpWebResponse,对指定页面做周期性的变化监控,并在页面变化时通知用户更新数据。 8.网络蜘蛛:使用WebClient,从一个入口页面开始获取和保存其HTML代码,以广度优先的分析页面上的所有超联接并做爬行移动。 其他描述: 网页抓取数据后,数据将存到NetSpider\bin\SaveHtml\目录下,NetSpider\bin\SaveHtml\Src\存放相应的缓存数据。 自动登陆时,程序将在NetSpider\bin\LoginScript\Script.txt文件检索和监控视窗地址匹配的脚本操作并执行。这里附上http://my.51job.com/my/My_SignIn.php和http://www.baidu.com/两个地址用于演示。 在功能菜单启动网络蜘蛛后,数据分析线程将会启动,所解析到的数据将会写入到NetSpider\bin\Data\UrlDB.mdb的Microsoft Office Access数据库。

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧