c# WPF 在同一seesion下,获取http协议下的验证码,并提交验证码验证

7 篇文章 0 订阅

关键点

1.保持session获取http数据

服务器通过session来保存用户的数据,用户第一次访问服务器时,服务器返回唯一的session ID 而后客户端将此id放在cookie中,每次访问服务器时,均带上此seesion ID ,从而让服务器进行识别。
在c#中要想保持cookie的访问服务器,主要是用到了以下方法:

private static CookieContainer m_Cookie = new CookieContainer();
public static string GetPageContent(string m_Url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(m_Url);
        request.CookieContainer = m_Cookie;
        HttpWebResponse response;
        try
        {
            response = (HttpWebResponse)request.GetResponse();
        }
        catch (Exception)
        {
            return CONN_ERR;
        }
        string cookieheader = request.CookieContainer.GetCookieHeader(new Uri(m_Url));
        m_Cookie.SetCookies(new Uri(m_Url), cookieheader);
        Stream stream = response.GetResponseStream();
        StreamReader reader = new StreamReader(stream);
        string result = reader.ReadToEnd();

        stream.Close();
        reader.Close();
        response.Close();
        Console.WriteLine("cookie IS :" + GetCookieJssonId(m_Cookie));

        return result;
    }

其中静态变量 m_Cookie 用于保持cookie,确保每次访问带上此cookie

获取图片的方法封装如下:

public static byte[] GetImgPageContent(string m_Url)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(m_Url);
        request.CookieContainer = m_Cookie;
        HttpWebResponse response;
        try
        {
            response = (HttpWebResponse)request.GetResponse();
        }
        catch (Exception)
        {
            return new byte[0];
        }
        string cookieheader = request.CookieContainer.GetCookieHeader(new Uri(m_Url));
        m_Cookie.SetCookies(new Uri(m_Url), cookieheader);
        using (Stream stream = response.GetResponseStream())
        {
            using (MemoryStream ms = new MemoryStream())
            {
                Byte[] buffer = new Byte[1024];
                int current = 0;
                do
                {
                    ms.Write(buffer, 0, current);
                } while ((current = stream.Read(buffer, 0, buffer.Length)) != 0);

                Console.WriteLine("cookie IS :" + GetCookieJssonId(m_Cookie));
                return ms.ToArray();
            }
        }

    }

获取cookie内容的方法 封装如下:

public static string GetCookieJssonId( CookieContainer cc)
{
    string cookieName = "JSESSIONID";

    List<Cookie> lstCookies = new List<Cookie>();

    Hashtable table = (Hashtable)cc.GetType().InvokeMember("m_domainTable",

        System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField |

        System.Reflection.BindingFlags.Instance, null, cc, new object[] { });

    foreach (object pathList in table.Values)

    {
        SortedList lstCookieCol = (SortedList)pathList.GetType().InvokeMember("m_list",
            System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField
            | System.Reflection.BindingFlags.Instance, null, pathList, new object[] { });
        foreach (CookieCollection colCookies in lstCookieCol.Values)

            foreach (Cookie c1 in colCookies) lstCookies.Add(c1);
    }
    var model = lstCookies.Find(p => p.Name == cookieName);

    if (model != null)
    {
        return model.Value;
    }
    return string.Empty;

}

2.显示图片到Image控件

通过上述的 GetImgPageContent 方法可以获取到byte[]类型的图片数据,将改数据加载到image控件的方法如下:

byte[] btyarray = GetImgPageContent();    
MemoryStream ms = new MemoryStream(btyarray);
//codeImg 为wpf中image控件的名(Name)
codeImg.Source = BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.Default);

参考
https://blog.csdn.net/second_rate/article/details/77100162
https://blog.csdn.net/ruixue0117/article/details/8265698

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值