开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 8059|回复: 6
收起左侧

[C#求助] POST登录成功后,第一次POSTcha询成功,第二次POSTcha询报错

[复制链接]
结帖率:0% (0/1)
发表于 2018-5-6 15:07:54 | 显示全部楼层 |阅读模式   湖北省武汉市
本帖最后由 xionghui565 于 2018-5-6 15:13 编辑

源码中的网址都是单位nei网的服务器地址,登录和第一次cha询都没问题,但第二次cha询就报错“尝试自动重定向的次数太多”,请各位大神指点一下,谢谢!
(已在CSDN上发了帖,但无解决问题,原帖地址 https://bbs.csdn.net/topics/392357840)
(我用易语言写了同样的功能(用的是"精易模块"里的"网页_访问()"),可以实现多次cha询,所以我觉得还是c#里POST提交的时候,是不是还有什么信息没提交过去,而导致报错)


c#源码
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Net.Security;
  9. using System.Reflection;   //反射
  10. using System.IO;
  11. using System.Net;


  12. namespace WindowsFormsApplication1
  13. {
  14.     public partial class Form1 : Form
  15.     {

  16.         CookieContainer Cookie_登录 = new CookieContainer();

  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.         }

  21.         private void button_刷新_Click(object sender, EventArgs e)
  22.         {
  23.             string url = "http://10.128.7.232/ssoserver/login";
  24.             string 返回的html = 网页POST(url, "", Cookie_登录, "utf-8");
  25.             string lt = 取中间文本(返回的html, "name="lt" value="", "" /");
  26.             string toSign = 取中间文本(返回的html, "name="toSign" value="", "" /");
  27.             label_lt.Text = lt;
  28.             label_toSign.Text = toSign;

  29.             string 验证码url = "http://10.128.7.232/ssoserver/CaptchaImg?j=" + JS_取随机数();
  30.             Image image = 网页POST图片(验证码url, "", Cookie_登录, "gb2312");
  31.             pictureBox_验证码.Image = image;
  32.             string str = Image_To_Base64(pictureBox_验证码.Image);
  33.             string 验证码 = 验证码识别(str);
  34.             textBox_验证码.Text = 验证码;               
  35.         }

  36.         private void button_登录_Click(object sender, EventArgs e)
  37.         {
  38.             string 帐号 = "abc";
  39.             string 密码 = "123456";
  40.             string lt = label_lt.Text;
  41.             string toSign = label_toSign.Text;
  42.             string 验证码 = textBox_验证码.Text;
  43.             string 返回的html = "";
  44.             string url = "http://10.128.7.232/ssoserver/login";
  45.             string post = "signedData=&toSign=" + toSign + "&username=" + 帐号 + "&password=" + 密码 + "&vcode=" + 验证码 + "<=" + lt + "&_eventId=submit";

  46.             HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);//新建一个HttpWebRequest            
  47.             myHttpWebRequest.Headers.Add("Accept-Language", "zh-cn");
  48.             myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
  49.             myHttpWebRequest.ContentLength = post.Length;
  50.             myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8";
  51.             myHttpWebRequest.Method = "POST";
  52.             myHttpWebRequest.CookieContainer = Cookie_登录;

  53.             Stream myRequestStream = myHttpWebRequest.GetRequestStream();
  54.             StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));//"gb2312","utf-8"
  55.             myStreamWriter.Write(post);        
  56.             myStreamWriter.Close();
  57.             myRequestStream.Close();

  58.             HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();//新建一个HttpWebResponse
  59.             Stream myResponseStream = myHttpWebResponse.GetResponseStream();
  60.             StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));//"gb2312","utf-8"
  61.             返回的html = myStreamReader.ReadToEnd();     
  62.             myStreamReader.Close();
  63.             myResponseStream.Close();
  64.             
  65.             if (返回的html.IndexOf("工作台") > 0)
  66.                 MessageBox.Show("登录成功");
  67.             else
  68.                 MessageBox.Show("登录失败");
  69.         }

  70.         private void button_cha询_Click(object sender, EventArgs e)
  71.         {
  72.             string *** = "420124197905260031";            
  73.             string url = "http://10.128.7.231:8080/hbcj/complex/employeeSimpleQueryAction!getEmployeeInfoRPC.do";
  74.             string post = "dto.jstj=" + *** + "&___businessId=531956";
  75.             string 返回的html = "";
  76.             返回的html = 网页POST(url, post, Cookie_登录, "utf-8");
  77.             string 基本信息 = 取中间文本(返回的html, "),new Array('", "'))").Replace("','", ",");
  78.             if (基本信息 == "")
  79.             {
  80.                 MessageBox.Show("没有找到此人的信息");
  81.             }
  82.             else
  83.             {
  84.                 MessageBox.Show("查找此人信息成功");
  85.                 textBox_返回的html.Text = 返回的html;
  86.             }
  87.                
  88.         }
  89.                
  90.         private string 网页POST(string url, string post, CookieContainer cookie, string 编码)
  91.         {            
  92.             string 返回的html = "";
  93.             HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);            
  94.             myHttpWebRequest.Headers.Add("Accept-Language", "zh-cn");
  95.             myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
  96.             myHttpWebRequest.UserAgent = "Mozilla/5.0 (compatible;Windows NT 6.1; WOW64;Trident/6.0;MSIE 9.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.27 Safari/537.36";
  97.             myHttpWebRequest.Method = "POST";
  98.             myHttpWebRequest.CookieContainer = cookie;

  99.             Stream myRequestStream = myHttpWebRequest.GetRequestStream();
  100.             StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
  101.             myStreamWriter.Write(post);        
  102.             myStreamWriter.Close();
  103.             myRequestStream.Close();

  104.             HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();            
  105.             Stream myResponseStream = myHttpWebResponse.GetResponseStream();
  106.             StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding(编码));
  107.             返回的html = myStreamReader.ReadToEnd();
  108.             myStreamReader.Close();
  109.             myResponseStream.Close();            
  110.             return 返回的html;
  111.         }

  112.         private Image 网页POST图片(string url, string post, CookieContainer cookie, string 编码)
  113.         {            
  114.             HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);      
  115.             myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
  116.             myHttpWebRequest.ContentLength = post.Length;
  117.             myHttpWebRequest.Method = "POST";
  118.             myHttpWebRequest.CookieContainer = cookie;

  119.             Stream myRequestStream = myHttpWebRequest.GetRequestStream();
  120.             StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));//"gb2312","utf-8"
  121.             myStreamWriter.Write(post);         
  122.             myStreamWriter.Close();
  123.             myRequestStream.Close();

  124.             HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();         
  125.             Stream imgStream = myHttpWebResponse.GetResponseStream();
  126.             Image image = Image.FromStream(imgStream);
  127.             imgStream.Close();
  128.             return image;
  129.         }





  130.         public string JS_取随机数()
  131.         {
  132.             Type obj = Type.GetTypeFromProgID("ScriptControl");
  133.             if (obj == null) return null;
  134.             object ScriptControl = Activator.CreateInstance(obj);
  135.             obj.InvokeMember("Language", BindingFlags.SetProperty, null, ScriptControl, new object[] { "JavaScript" });
  136.             string js = "function refeshCode(){ return Math.random(); }";
  137.             obj.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { js });
  138.             return obj.InvokeMember("Eval", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { "refeshCode()" }).ToString();
  139.         }

  140.         public string 验证码识别(string base64string)
  141.         {
  142.             CookieContainer Cookie_空 = new CookieContainer();//没有用,只是为了不让"网页POST()"缺少参数.            
  143.             string url = "http://10.129.136.129:3600/ajax.php";//nei网网址
  144.             string post = STR_TO_UTF8("请求") + "=" + STR_TO_UTF8("通用文字识别") + "&base64_img=" + base64string;
  145.             string 返回的html = 网页POST(url, post, Cookie_空, "gb2312");
  146.             string[] 结果集 = 返回的html.Split('^');
  147.             if (结果集[0] != "通用文字识别成功")
  148.             {
  149.                 MessageBox.Show(结果集[1]);
  150.                 return "";
  151.             }

  152.             if (结果集.Length != 2)
  153.             {
  154.                 MessageBox.Show(结果集[1]);
  155.                 return "";
  156.             }

  157.             return 结果集[1];
  158.         }

  159.         private string STR_TO_UTF8(string txt)
  160.         {
  161.             string code = "";
  162.             foreach (byte b in Encoding.UTF8.GetBytes(txt))
  163.             {
  164.                 code += '%' + b.ToString("X");
  165.             }
  166.             return code;
  167.         }        

  168.         private string 取中间文本(string 全文本, string 前面文本, string 后面文本)
  169.         {
  170.             int 位置A = 全文本.IndexOf(前面文本);
  171.             int 位置B = 全文本.IndexOf(后面文本, 位置A + 1);
  172.             if (位置A < 0 || 位置B < 0)
  173.             {
  174.                 return "";
  175.             }
  176.             else
  177.             {
  178.                 位置A = 位置A + 前面文本.Length;
  179.                 位置B = 位置B - 位置A;
  180.                 if (位置A < 0 || 位置B < 0)
  181.                 {
  182.                     return "";
  183.                 }
  184.                 return 全文本.Substring(位置A, 位置B);
  185.             }
  186.         }

  187.         public string Image_To_Base64(Image image)
  188.         {
  189.             string strbaser64 = "";
  190.             try
  191.             {
  192.                 Bitmap bmp = new Bitmap(image);
  193.                 MemoryStream ms = new MemoryStream();
  194.                 bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
  195.                 byte[] arr = new byte[ms.Length];
  196.                 ms.Position = 0;
  197.                 ms.Read(arr, 0, (int)ms.Length);
  198.                 ms.Close();
  199.                 strbaser64 = Convert.ToBase64String(arr);
  200.             }
  201.             catch (Exception)
  202.             {
  203.                 throw new Exception("Something wrong during convert!");
  204.             }
  205.             return strbaser64;
  206.         }         
  207.     }
  208. }
复制代码





发表于 2019-3-27 17:38:32 | 显示全部楼层   广东省揭阳市
调试下 cookie 看下 有可能 要清理一些无用cookie 才行
回复 支持 反对

使用道具 举报

发表于 2018-7-21 09:18:06 | 显示全部楼层   广东省珠海市
代码写的有点乱啊,没有归类
回复 支持 反对

使用道具 举报

发表于 2018-5-8 16:27:56 | 显示全部楼层   北京市北京市
挺简单的事,让你给搞复杂了,为啥不用httphelper
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
 楼主| 发表于 2018-5-6 19:33:04 | 显示全部楼层   湖北省武汉市


关闭重定向    request.AllowAutoRedirect = false;  第二次cha询就没有报错了,但返回的也不是要cha询的结果,返回信息如下:
<html><head><title>302 Moved Temporarily</title></head>
<body bgcolor="#FFFFFF">
<p>This document you requested has moved
temporarily.</p>
<p>It's now at <a >http://10.128.7.232:80/ssoserver/login?service=http%3A%2F%2F10.128.7.231%3A8080%2Fhbcj%2Fj_spring_cas_security_check%3F&stService=ZujbJg53OJz9prDtrWxo6dGo8I8vVGZIVJDxjs091dU%3D</a>.</p>
</body></html>
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
 楼主| 发表于 2018-5-6 18:31:01 | 显示全部楼层   湖北省武汉市
关闭重定向    request.AllowAutoRedirect = false;  第二次cha询就没有报错了,但返回的也不是要cha询的结果,返回信息如下:
<html><head><title>302 Moved Temporarily</title></head>
<body bgcolor="#FFFFFF">
<p>This document you requested has moved
temporarily.</p>
<p>It's now at <a >http://10.128.7.232:80/ssoserver/login?service=http%3A%2F%2F10.128.7.231%3A8080%2Fhbcj%2Fj_spring_cas_security_check%3F&stService=ZujbJg53OJz9prDtrWxo6dGo8I8vVGZIVJDxjs091dU%3D</a>.</p>
</body></html>
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 5 天

发表于 2018-5-6 15:25:14 | 显示全部楼层   吉林省白山市
不重定向试试呗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表