根据网络上的实例,能够做一个简单的但是面对复杂的却一直不能成功 public String GetPostHttp()
{
string srcString="chucuo"; // 提交按钮的文本
string submitButton = "登录";
// 页面的 VeiwState(可以通过IE打开页面,右键“查看源文件”取得)
string viewState = "/wEPDwULLTEwMDUyNjYzMjhkZA==";
// 页面的 EventValidation(可以通过IE打开页面,右键“查看源文件”取得)
//string eventValidation = "/wEWBAK3xNW/DgKfyLs/Arnisr4CAumSxcAMOcITkYMHoeMuHNAexLkgIUS6ilo="; submitButton = System.Web.HttpUtility.UrlEncode(submitButton);
viewState = System.Web.HttpUtility.UrlEncode(viewState);
//eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
String hc = "北京";
String dc = "上海";
String dc2 = "深圳";
hc = System.Web.HttpUtility.UrlEncode(hc);
dc = System.Web.HttpUtility.UrlEncode(dc);
dc2 = System.Web.HttpUtility.UrlEncode(dc2);
try
{
// 要提交表单的URI字符串。
//string uriString = "http://flights.ctrip.com/Domestic/ShowFareFirst.aspx";
string uriString = "http://flights.ctrip.com/Domestic/ShowFareFirst.aspx";
// 要提交的字符串数据。格式形如:user=uesr1&password=123
string postString = "flight_type=M&bunk_grade=Y&FlightWay=M&HomeCity="+ hc +"&DestCity1="+ dc +"&DestCity2="+ dc2 +"&TicketAgency_List="+ hc +"&DDatePeriod1=2008-4-21&startPeriod=All&ADatePeriod1=2008-4-21&startPeriod2=All&ChildType=ADU&airlineChoice=All&DSeatClass=Y&Quantity=1&NOVIEWSTATE=" + viewState;
// 初始化WebClient
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
// 将字符串转换成字节数组
byte[] postData = Encoding.Default.GetBytes(postString);
// 上传数据,返回页面的字节数组
//byte[] buff = webclient.DownloadData(url);
//string cookie = webclient.ResponseHeaders.Get("Set-Cookie");
byte[] responseData = webClient.UploadData(uriString, "POST", postData);
// 将返回的将字节数组转换成字符串(HTML);
// ASP.NET 返回的页面一般是Unicode,如果是简体中文应使用
// Encoding.GetEncoding("GB2312").GetString(responseData)
srcString = Encoding.Default.GetString(responseData);
}
catch (WebException we)
{
string msg = we.Message;
}
return srcString; }
请高手指点下如何能够成功的Post 这个页面http://flights.ctrip.com/Domestic/SearchFlights.aspx
{
string srcString="chucuo"; // 提交按钮的文本
string submitButton = "登录";
// 页面的 VeiwState(可以通过IE打开页面,右键“查看源文件”取得)
string viewState = "/wEPDwULLTEwMDUyNjYzMjhkZA==";
// 页面的 EventValidation(可以通过IE打开页面,右键“查看源文件”取得)
//string eventValidation = "/wEWBAK3xNW/DgKfyLs/Arnisr4CAumSxcAMOcITkYMHoeMuHNAexLkgIUS6ilo="; submitButton = System.Web.HttpUtility.UrlEncode(submitButton);
viewState = System.Web.HttpUtility.UrlEncode(viewState);
//eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
String hc = "北京";
String dc = "上海";
String dc2 = "深圳";
hc = System.Web.HttpUtility.UrlEncode(hc);
dc = System.Web.HttpUtility.UrlEncode(dc);
dc2 = System.Web.HttpUtility.UrlEncode(dc2);
try
{
// 要提交表单的URI字符串。
//string uriString = "http://flights.ctrip.com/Domestic/ShowFareFirst.aspx";
string uriString = "http://flights.ctrip.com/Domestic/ShowFareFirst.aspx";
// 要提交的字符串数据。格式形如:user=uesr1&password=123
string postString = "flight_type=M&bunk_grade=Y&FlightWay=M&HomeCity="+ hc +"&DestCity1="+ dc +"&DestCity2="+ dc2 +"&TicketAgency_List="+ hc +"&DDatePeriod1=2008-4-21&startPeriod=All&ADatePeriod1=2008-4-21&startPeriod2=All&ChildType=ADU&airlineChoice=All&DSeatClass=Y&Quantity=1&NOVIEWSTATE=" + viewState;
// 初始化WebClient
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
// 将字符串转换成字节数组
byte[] postData = Encoding.Default.GetBytes(postString);
// 上传数据,返回页面的字节数组
//byte[] buff = webclient.DownloadData(url);
//string cookie = webclient.ResponseHeaders.Get("Set-Cookie");
byte[] responseData = webClient.UploadData(uriString, "POST", postData);
// 将返回的将字节数组转换成字符串(HTML);
// ASP.NET 返回的页面一般是Unicode,如果是简体中文应使用
// Encoding.GetEncoding("GB2312").GetString(responseData)
srcString = Encoding.Default.GetString(responseData);
}
catch (WebException we)
{
string msg = we.Message;
}
return srcString; }
请高手指点下如何能够成功的Post 这个页面http://flights.ctrip.com/Domestic/SearchFlights.aspx
解决方案 »
- 请问,这个Link方法查询,怎么写?
- C# webbrowser模拟点击超链接
- 请教几个有关于csExWB的问题-弹出窗口不正常、屏蔽打印对话框以及为何跳出ActiveX提示等
- 请问大家怎么样一个结构才算是符合OOP思想的设计?
- c#对枚举类型的xml序列化,如何才能使序列化后的xml不出现枚举元素
- 如何定义自己的文体格式
- 定义了两个对象Form y = new Form(); TextBox tb = new TextBox();,如何将文本框对象tb添加到y窗体对象中呢?
- 遍历数组,取出所有可能的排列组合
- 新手请教一个委托的问题。谢谢
- web中,服务器“下载”问题
- c#打包问题!
- 并发冲突: UpdateCommand 影响了所需 1 个记录中的 0 个记录...急。救!
第一步应该请求用Get,HttpRequest类,请求页面
使用HttpResponse类,获取你要post的数据,
第二步,post,同样使用那两个类,
关键是要分析数据post的内容,格式,等
POST /Domestic/ShowFareFirst.aspx HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Referer: http://flights.ctrip.com/Domestic/SearchFlights.aspx
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
Host: flights.ctrip.com
Content-Length: 298
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: __utma=167964915.382392779.1208746167.1208830385.1208831162.7; __utmz=167964915.1208746167.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ALLYESID4=00080421104928890347; Customer=HAC=5&HAL=zh%2Dcn; __utmb=167964915.17.10.1208831161968; __utmc=167964915; ASPSESSIONIDCASDASAA=MBFJLPPBKNOIGGOFKNHELIJNNOVIEWSTATE=%2FwEPDwULLTEwMDUyNjYzMjhkZA%3D%3D&flight_type=D&bunk_grade=Y&FlightWay=S&HomeCity=%B1%B1%BE%A9&DestCity1=%C9%CF%BA%A3&DestCity2=&TicketAgency_List=%B1%B1%BE%A9&DDatePeriod1=2008-4-22&startPeriod=All&ADatePeriod1=&startPeriod2=All&ChildType=ADU&airlineChoice=All&DSeatClass=Y&Quantity=1HTTP/1.1 200 OK
Date: Tue, 22 Apr 2008 02:50:12 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/html; charset=gb2312
Content-Length: 82505GET /styles/common/private_header_print.css HTTP/1.1
Accept: */*
Referer: http://flights.ctrip.com/Domestic/ShowFareFirst.aspx
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
Host: webresource.ctrip.com
Connection: Keep-Alive
Cookie: __utma=167964915.382392779.1208746167.1208830385.1208831162.7; __utmz=167964915.1208746167.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ALLYESID4=00080421104928890347; Customer=HAC=5&HAL=zh%2Dcn; __utmb=167964915.17.10.1208831161968; __utmc=167964915
或者能不能帮我分析一下这个获取的信息
flight_type=D
bunk_grade=Y
FlightWay=S
HomeCity=%B1%B1%BE%A9
DestCity1=%C9%CF%BA%A3
DestCity2=
TicketAgency_List=%B1%B1%BE%A9
DDatePeriod1=2008-4-22
startPeriod=All
ADatePeriod1=
startPeriod2=All
ChildType=ADU
airlineChoice=All
DSeatClass=Y
Quantity=1
这个是需要post的数据,顺序不要乱了
注意的是,这个有Cookies需要把它也获取然后加进去
难道要自己手动添加到Post数据尾部?
学习一下
req 是HttpRequest对象
req.CookieContainer = ccc;
此时CCC是一个空的Cookies容器
获取后添加到Cookies容器里,
res.Cookies = ccc.GetCookies(req.RequestUri);
以后就用这个容器就可以了