哈哈,,,刚才是说笑:
这样做,用Iframe来实现,在隐藏的iframe里面,首先自己用数据进行外部提交到通行证登录验证的程序,用脚本来定时检查目标框架的网页是否载入完毕.如果完毕,检查URL,是否正确,然后,用代码,自动转向你需要转向的通行证页面.就行了.这么点小问题.

解决方案 »

  1.   

    解决:使用asp.net中的httprequest和httpresponse来实现。要点:
    1。 通过附加一个cookiecontainer到httprequest对象中,可以得到登录后返回的代表SESSION ID的COOKIE。 见Login方法
    2。 将此COOKIE包含在一个cookiecontainer中并附加到另一个HTTPREQUEST请求中,则可以实现SESSION的还原。见getPage方法
      

  2.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    // Put user code to initialize the page herestring strResult;if (HttpContext.Current.Application[cookieheader] != null)
    {
    cookieheader = (string)HttpContext.Current.Application[cookieheader];
    }
    else
    {
    //Login into the website and keep the cookie for the session in the application variable
    string strLogin = Login(http://www.thesiteyouwanttovisit/theloginpage.asp, Action=&USERID=&Password=) ;
    }
    strResult = getPage(http://www.thesiteyouwanttovisit/theloginpage.asp, Action=&data=) ;
    //Write the result to htm file
    FileStream htmFile = new FileStream(c:\save.htm, FileMode.OpenOrCreate);
    StreamWriter sw = new StreamWriter(htmFile);
    sw.Write(strResult);
    sw.Close();
    htmFile.Close();// output the result
    Response.Write(strResult);
    }
    public static string Login(String url, String paramList) 
    {
    HttpWebResponse res = null;
    string strResult=;try 
    {HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    req.Method = POST;
    req.ContentType = application/x-www-form-urlencoded;
    req.AllowAutoRedirect = false;
    CookieContainer cookieCon = new CookieContainer();
    req.CookieContainer = cookieCon;StringBuilder UrlEncoded = new StringBuilder();
    Char[] reserved = {'?', '=', '&'};
    byte[] SomeBytes = null;if (paramList != null) 
    {
    int i=0, j;
    while(i{
    j=paramList.IndexOfAny(reserved, i);
    if (j==-1)
    {
    UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, paramList.Length-i)));
    break;
    }
    UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j-i)));
    UrlEncoded.Append(paramList.Substring(j,1));
    i = j+1;
    }
    SomeBytes = Encoding.UTF8.GetBytes(UrlEncoded.ToString());
    req.ContentLength = SomeBytes.Length;
    Stream newStream = req.GetRequestStream();
    newStream.Write(SomeBytes, 0, SomeBytes.Length);
    newStream.Close();

    else 
    {
    req.ContentLength = 0;
    }
    res = (HttpWebResponse)req.GetResponse();
    cookieheader = req.CookieContainer.GetCookieHeader(new Uri(url));
    HttpContext.Current.Application.Lock();
    HttpContext.Current.Application[cookieheader] = cookieheader;
    HttpContext.Current.Application.UnLock();Stream ReceiveStream = res.GetResponseStream();
    Encoding encode = System.Text.Encoding.GetEncoding(utf-8);
    StreamReader sr = new StreamReader( ReceiveStream, encode );
    Char[] read = new Char[256];
    int count = sr.Read( read, 0, 256 );
    while (count > 0) 
    {
    String str = new String(read, 0, count);
    strResult += str;
    count = sr.Read(read, 0, 256);
    }

    catch(Exception e) 
    {
    strResult = e.ToString();

    finally 
    {
    if ( res != null ) 
    {
    res.Close();
    }
    }return strResult;
    }
    public static string getPage(String url, String paramList) 
    {
    HttpWebResponse res = null;
    string strResult = ;try 
    {HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    req.Method = POST;
    req.KeepAlive = true;
    req.ContentType = application/x-www-form-urlencoded;
    CookieContainer cookieCon = new CookieContainer();
    req.CookieContainer = cookieCon;
    req.CookieContainer.SetCookies(new Uri(url),cookieheader);
    StringBuilder UrlEncoded = new StringBuilder();
    Char[] reserved = {'?', '=', '&'};
    byte[] SomeBytes = null;if (paramList != null) 
    {
    int i=0, j;
    while(i{
    j=paramList.IndexOfAny(reserved, i);
    if (j==-1)
    {
    UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, paramList.Length-i)));
    break;
    }
    UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j-i)));
    UrlEncoded.Append(paramList.Substring(j,1));
    i = j+1;
    }
    SomeBytes = Encoding.UTF8.GetBytes(UrlEncoded.ToString());
    req.ContentLength = SomeBytes.Length;
    Stream newStream = req.GetRequestStream();
    newStream.Write(SomeBytes, 0, SomeBytes.Length);
    newStream.Close();

    else 
    {
    req.ContentLength = 0;
    }
    res = (HttpWebResponse)req.GetResponse();
    Stream ReceiveStream = res.GetResponseStream();
    Encoding encode = System.Text.Encoding.GetEncoding(utf-8);
    StreamReader sr = new StreamReader( ReceiveStream, encode );
    Char[] read = new Char[256];
    int count = sr.Read( read, 0, 256 );
    while (count > 0) 
    {
    String str = new String(read, 0, count);
    strResult += str;
    count = sr.Read(read, 0, 256);
    }

    catch(Exception e) 
    {
    strResult = e.ToString();

    finally 
    {
    if ( res != null ) 
    {
    res.Close();
    }
    }return strResult;
    }
      

  3.   

    楼上这种解法不是万能的,很局限,只能在用url能登陆的地方用
      

  4.   

    是的 当url不能登陆时候就不能用
      

  5.   

    much site 's authorization is very strict , so only several site can use this method .