我在用别人酒店的接口,也就是请求一个地址,然后返回一个xml文件,我现在要做预定,必须先通过登录url地址接口把帐号和密码请求到服务器返回一个xml是否登录成功,然后在通过预定url地址接口把要预定信息做参数请求服务器返回xml。
如果是直接把参数写好,然后直接在网页地址栏粘贴url地址,先登录,然后在预定是可以的。但我一加到程序里就不行了。代码如下/// <summary>
    /// 预定
    /// </summary>
    /// <param name="roomid"></param>
    protected void GetYD(string roomid) {
        //向服务器提交登录信息(以下返回一个xml文件)
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load("http://服务器ip/HCRSext/tx/hcrsinterface.do?cmd=login&charset=gb18030&loginname=no2&password=friendNo2");
        //预定接口(以下返回一个xml文件)
        string url = "http://服务器ip/HCRSext/tx/hcrsinterface.do?cmd=booking&charset=gb18030&dateformat=yyyy-mm-dd&roomtypeid=" + roomid + "&checkindate=2012-11-23&checkoutdate=2012-11-24&count=1&guestname=no2&phone=13956969079&re=好&loginname=no2&password=friendNo2";
        xmlDoc.Load(url);
        
        XmlNodeList xn = xmlDoc.SelectSingleNode("result").ChildNodes;
        foreach (XmlNode xnf in xn)
        {
            XmlElement xe = (XmlElement)xnf;
            if (xe.Name == "alert")
            {
                msg = "<script>alert('" + xe.InnerText + "');</script>";
            }
        }
    }上面主要是先通过获取登录的xml文件,判断是否登录成功。然后在通过预定接口,预定房间,参数在url后面。和上面说的一样,我如果直接把两个url在浏览器直接运行,是可以预定的,但我程序这样写,每次都预定不成功,不知道是不是不再同一个会话中,好像我这样写,登录的信息没保存一样。
那个开发接口的人和我说:在同一个会话中登录了,预订时系统就会有登录信息。。我不知道我改怎么写。求大神帮忙

解决方案 »

  1.   

    http://cn.bing.com/search?q=.net+webclient+cookiecontainer&qs=n&form=QBRE&pq=.net+webclient+cookiecontainer&sc=0-15&sp=-1&sk=
      

  2.   

    很好理解。
    别人的系统肯定会对身份验证的。
    你第一个登录成功后,你并没有将cookie或session再次传递到服务器进行预订。所以会失败。浏览器成功,可能是你在浏览器的地址栏中敲入第一个登录的url,接着再敲入第二个url,这时相关的cookie或session是由浏览器帮你提交的。所以可以成功。如果对方的是使用会话cookie的话,也很容易让预订不成功。
    打开浏览器敲入登录的url.关掉浏览器。
    再打开浏览器,再敲入第二个url,此时就不会预订成功了