求大神帮忙 登录成功后 POST问题

tanaichuan 2015-09-06 09:40:23






















发送了就提示 没有绑定 手机 。。。但是我手机是绑定了的 正常浏览器发送就能发送成功,然后我 截取post包 再次发送 还是能成功。。。自己写的代码来发送就提示绑定手机了。。。找了快2天,实在不知道 哪里出错了。。。大神能否给讲解下。谢谢!














//这个是截取的cookies
ad_gid=14413794079304985; qg_ad_guid=4329f3598ad52e6b6ad7dee5dc6d14dd; pgv_pvi=9072179200; qdgg=2366%3B%3B; __utma=1.133219513.1441379411.1441446549.1441536101.5; __utmz=1.1441536101.5.2.utmcsr=qidian.com|utmccn=(referral)|utmcmd=referral|utmcct=/Default.aspx; stat_gid=7509574660; stat_id24=0,-1,1,noimg; dltk=0%7Ctanaichuan; __utmb=1.15.10.1441536101; __utmt=1; mcc=uid=110202558&nsc=4&npc=0&nfc=0&nnc=0&bbs=0; pgv_si=s1310043136; __utmc=1; stat_sessid=3364416750; ll=2015-09-06 20:07:17; rt=2009-07-11 19:58:53; uos=00000000011112000000; uc=1; mdltk=id=e934e28d8260a1e92a89e07ebf0177f5&nk=%e5%a7%8b%e7%bb%88V%e4%b8%8d%e5%a4%9f&ut=0&si=d8043c4e8ad0d2518c330c4a998c9f1d&pd=tanaichuan&hi=0&ai=d64353edfca01f3d1529e0a19eb82d2d&an=; cmfuToken=N((AcT6ge1by80bTh_M4EQEt8BicS8GNLPFKFq-wDcz0WPbYnioqlK_5-XSmpLYvJZWwc7dEe-7Fk1Sx8WLb9l7048k4GLldrGVU6gT9lFEjTNGv8RietDBN4H9tPS3pgo4cJ5l2OP2rtwt4xyOeEDAyAQ6LycXAscRdMtfBoTlb0kHAJE5yO5xPz99r4CZG-L9VG-VmM3diQFI-E5e8UIMK2xpXqxdQXPmzAnRrK_xPTTTV4DNaNCE9EL22vCz_0Ez1BH7WaniPaQ1; tid=c5CoEySujyzrwhQIEzrQUxzMYoc4IWi-CUW8gqkaQNsTJzESEZcni2hC5M_bcrXqH6hb-BpHvbM1; zan=0; nmc_n=4; b_t_s=s; sb_u=undefined; beacon_visit_count=1;pTime=Sat%20Sep%2005%202015%2019%3A01%3A00%20GMT+0800%20%28%u4E2D%u56FD%u6807%u51C6%u65F6%u95F4%29;__utmt=1












--这是我的代码--



public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();

WebBw.Url = new Uri("http://www.qidian.com");
}

HomeController homeCtl = new HomeController();
Thread oThread;






// 获得浏览器里面的cookies

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpReserved);
//取出Cookie,当登录后才能取
/// <summary>
/// 获得浏览器里面的cookies
/// </summary>
/// <param name="url">浏览器的网址</param>
/// <returns>返回string类型的(cookies)</returns>
private static string GetCookieString(string url)
{
// Determine the size of the cookie
int datasize = 256;
StringBuilder cookieData = new StringBuilder(datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
{
if (datasize < 0)
return null;
// Allocate stringbuilder large enough to hold the cookie
cookieData = new StringBuilder(datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
return null;
}
return cookieData.ToString();
}


//点击开始发送
private void button1_Click(object sender, EventArgs e)
{

string Strcook;

Strcook= GetCookieString("http://www.qidian.com/Default.aspx");
// Strcook = GetCookieString("http://www.qidian.com/Book/3022278.aspx");
string[] arrCookie = Strcook.Split(';');

CookieContainer cookie_container = new CookieContainer(); //加载Cookie
//cookie_container.SetCookies(new Uri(url), cookie);
Strcook += ";pTime=Sat%20Sep%2005%202015%2019%3A01%3A00%20GMT+0800%20%28%u4E2D%u56FD%u6807%u51C6%u65F6%u95F4%29;__utmt=1";
string cookieStr = Strcook;
string StrUTFcx="";
//实现 string(cookies)转化为CookieContainer类型
string[] cookstr = cookieStr.Split( ';');
foreach (string str in cookstr)
{
string[] cookieNameValue = str.Split( '=');
StrUTFcx=cookieNameValue[1].Trim().ToString();
StrUTFcx = StrUTFcx.Replace(",", "%2C");
Cookie ck = new Cookie(cookieNameValue[0].Trim().ToString(), StrUTFcx);
ck.Domain = "www.qidian.com";//必须写对 (读取的网页页面)

cookie_container.Add(ck);
}

string plAddress = "http://c.pingba.qidian.com/ForumAjax.aspx?opName=AddForumReview";//发送的地址

//提交的数据
string mywords = "bookId=3022278&title=%u597D%u4E66%u652F%u6301%u4E0B&content=%u597D%u4E66%u652F%u6301%u4E0B%u597D%u4E66%u652F%u6301%u4E0B%u597D%u4E66%u652F%u6301%u4E0B%u597D%u4E66%u652F%u6301%u4E0B%u597D%u4E66%u652F%u6301%u4E0B%u597D%u4E66%u652F%u6301%u4E0B%u597D%u4E66%u652F%u6301%u4E0B%u597D%u4E66%u652F%u6301%u4E0B&postType=%5B%u8BC4%u8BBA%5D&validCode=&validateString=&isAnonymous=0&isSynchronous=false&starNum=0";//发送的内容


string result = PostHttp(plAddress, mywords, "application/x-www-form-urlencoded", cookie_container);
label2.Text = result;
// result= System.Web.HttpUtility.UrlEncode(result, Encoding.UTF8);
label1.Text = "发送了";
}


//post提交数据
/// <summary>
/// post提交数据
/// </summary>
/// <param name="url">提交的地址</param>
/// <param name="body">提交的数据(内容)</param>
/// <param name="contentType">浏览器的类型</param>
/// <param name="YMcookes">cookies数据</param>
/// <returns>返回的数据</returns>
public static string PostHttp(string url, string body, string contentType, CookieContainer YMcookes)
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);

httpWebRequest.KeepAlive = true;
//获取Accept标头值
httpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
//获取Referer标头值
httpWebRequest.Referer = "http://www.qidian.com/Default.aspx";

httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0";

httpWebRequest.CookieContainer = YMcookes; //获取关联的COIIkies
httpWebRequest.ContentType = contentType;//类型
httpWebRequest.Method = "POST";//提交方式
httpWebRequest.Timeout = 20000;


byte[] btBodys = Encoding.UTF8.GetBytes(body);//提交内容转化
httpWebRequest.ContentLength = btBodys.Length;
httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
//返回浏览器的响应
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
//获取响应的流数据
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
string responseContent = streamReader.ReadToEnd();//流读取赋值

httpWebResponse.Close();
streamReader.Close();
httpWebRequest.Abort();
httpWebResponse.Close();

//获取返回的状态
var Intzt = (int)httpWebResponse.StatusCode;
string sd= httpWebResponse.StatusDescription;

return responseContent;
}

private void WebBw_NewWindow(object sender, CancelEventArgs e)
{
//打开新窗口时 让窗口在web里面打开
string url = ((WebBrowser)sender).StatusText;
WebBw.Navigate(url);
e.Cancel = true;
}











}



...全文
406 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiyanglvbb 2015-09-07
  • 打赏
  • 举报
回复
引用 9 楼 tanaichuan 的回复:
[quote=引用 8 楼 xiyanglvbb 的回复:] 如果条件允许你可以改成完全用代码post数据,别用webbrowse+代码取浏览器cookie的方式了,这样搞的很繁杂; 楼主觉得呢?
验证码 过不去。。。。!!!!!!!!!不然我也不会这么麻烦。。。获得的验证码都是 上一次的验证码 ,,,这个我不知道怎么取得本次验证码。。。[/quote] 什么时候返回的什么验证码,图片验证码 还是手机短信验证码?有地址吗,我看看...
tanaichuan 2015-09-07
  • 打赏
  • 举报
回复
引用 8 楼 xiyanglvbb 的回复:
如果条件允许你可以改成完全用代码post数据,别用webbrowse+代码取浏览器cookie的方式了,这样搞的很繁杂; 楼主觉得呢?
验证码 过不去。。。。!!!!!!!!!不然我也不会这么麻烦。。。获得的验证码都是 上一次的验证码 ,,,这个我不知道怎么取得本次验证码。。。
xiyanglvbb 2015-09-07
  • 打赏
  • 举报
回复
如果条件允许你可以改成完全用代码post数据,别用webbrowse+代码取浏览器cookie的方式了,这样搞的很繁杂; 楼主觉得呢?
tanaichuan 2015-09-07
  • 打赏
  • 举报
回复
引用 5 楼 starfd 的回复:
你前面有登陆过程吗?登录完之后应该有cookie的,你要用那个cookie,而不是浏览器里的
webbrowse用这个登录的。。。因为这个 获取不到完整的cookies 所以 我重新获取了下cookies
tanaichuan 2015-09-07
  • 打赏
  • 举报
回复
引用 4 楼 xiyanglvbb 的回复:
还有我没明白你为什么要 // 获得浏览器里面的cookies 请求之后会有cookie返回,你取浏览器里的cookie干嘛。。。取得浏览器里的cookie 跟你代码post数据返回的cookie肯定不一样的;会不会是这个问题呢?
WebBw获得的cookies 不完全。。。 我要的是完全的cookies //、
  • 打赏
  • 举报
回复
你前面有登陆过程吗?登录完之后应该有cookie的,你要用那个cookie,而不是浏览器里的
xiyanglvbb 2015-09-07
  • 打赏
  • 举报
回复
还有我没明白你为什么要 // 获得浏览器里面的cookies 请求之后会有cookie返回,你取浏览器里的cookie干嘛。。。取得浏览器里的cookie 跟你代码post数据返回的cookie肯定不一样的;会不会是这个问题呢?
xiyanglvbb 2015-09-07
  • 打赏
  • 举报
回复
建议: 1,用fiddler抓取你用浏览器正常post的数据和RAW里的信息; 2,用fiddler里的composer功能 将你代码的post数据贴进去,看看能不能成功; 我觉得应该是post数据不对或者cookie信息没带全;
wc_ling 2015-09-07
  • 打赏
  • 举报
回复

110,533

社区成员

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

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

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