zoukankan      html  css  js  c++  java
  • asp.net 调用天气所遇到的问题

      由于在项目用了显示天气的功能,原有的调用方法 直接通过      <iframe name="weather_inc" src="http://i.tianqi.com/index.php?c=code&id=55" style="border: solid 0px #7ec8ea"    width="278" height="240" frameborder="0" marginwidth="0" marginheight="0" scrolling="no">
         </iframe>

        一开始并没有发现什么问题, 但是在最近使用jquery easyui  Datagrid 控件的时候,发现所有 DataGrid 都不显示,而且在其他页面运行很正常的代码也不行,一直找不到原因,之后新建了一个页面,把老页面一个div 一个div 的复制,发现去掉天气 完全没有问题,肯定是天气出了问题。发现报js 错误,联系天气网的客服,发现改完了之后,datagrid 还是不行。

        终于痛定思痛,决定自食其力,人家没问题了,那只能自己搞了,打开 http://i.tianqi.com/index.php?c=code&id=55  看了一下源文件 ,发现

        <script type="text/javascript" src="http://www.tianqi.com/static/js/jquery.min.new.js"></script>

        发现去掉这段完全可以显示天气,不知道他们引用是干嘛的,可是对我没有用啊,

       终于发现问题,应该是js 类库冲突了,因为我页面中引用了这个文件

       <script type="text/javascript" src="js/jquery-easyui-1.3.2/jquery-1.8.0.min.js"></script>

       只能自己处理,于是乎想到了这个类 HttpWebRequest  这个类,

       马上新增页面  tianqi.aspx

      public partial class tianqi : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            { 
    
    
           HttpWebRequest tianqiRequest = (HttpWebRequest)WebRequest.Create("http://i.tianqi.com/index.php?c=code&id=55");
                //如果这里的url是java的servlet编写的
                tianqiRequest.Method = "POST";
                tianqiRequest.ContentType = "application/x-www-form-urlencoded";
                var response = tianqiRequest.GetResponse();
                    string answer;
                    using (var sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312")))
                    {
                        answer = sr.ReadToEnd();
                        if (response != null)
                        {
                            response.Close();
                        }
                    }
          //将这个捣蛋的js 删掉       
              if (answer.Contains("<script type="text/javascript" src="http://www.tianqi.com/static/js/jquery.min.new.js"></script>"))
                    {
                        answer = answer.Replace("<script type="text/javascript" src="http://www.tianqi.com/static/js/jquery.min.new.js"></script>", "");
    
                    }
                    this.Response.Write(answer);
    
             }
       }
    View Code


    问题搞定了,以为可以皆大欢喜了,

    就在高兴的时候发现,点击枣庄,修改  

    点保存, 怎还是枣庄,奇怪从ie 里面访问明明是好的,看了一下源文件

    原来他们发选择的城市存到Cookie 里了,这里不好搞了, 他们网站存的cookie 我怎么读取啊,懵了,

    终于百度找到了一种办法,跨域访问Cookie,下面是代码

    /// <summary>
        /// 获取Cookie的方法类。
        /// </summary>
        public class CookieManger
        {
            /// <summary>
            /// 通过COM来获取Cookie数据。
            /// </summary>
            /// <param name="url">当前网址。</param>
            /// <param name="cookieName">CookieName.</param>
            /// <param name="cookieData">用于保存Cookie Data的<see cref="StringBuilder"/>实例。</param>
            /// <param name="size">Cookie大小。</param>
            /// <returns>如果成功则返回<c>true</c>,否则返回<c>false</c></returns>
            [DllImport("wininet.dll", SetLastError = true)]
            public static extern bool InternetGetCookie(
                string url, string cookieName,
                StringBuilder cookieData, ref int size);
            /// <summary>
            /// 获取当前<see cref="Uri"/><see cref="CookieContainer"/>实例。
            /// </summary>
            /// <param name="uri">当前<see cref="Uri"/>地址。</param>
            /// <returns>当前<see cref="Uri"/><see cref="CookieContainer"/>实例。</returns>
            public static CookieContainer GetUriCookieContainer(Uri uri)
            {
                CookieContainer cookies = null;
    
                // 定义Cookie数据的大小。
                int datasize = 256;
                StringBuilder cookieData = new StringBuilder(datasize);
    
                if (!InternetGetCookie(uri.ToString(), null, cookieData,
                   ref datasize))
                {
                    if (datasize < 0)
                        return null;
    
                    // 确信有足够大的空间来容纳Cookie数据。
                    cookieData = new StringBuilder(datasize);
                    if (!InternetGetCookie(uri.ToString(), null, cookieData,
                        ref datasize))
                        return null;
                }
    
    
                if (cookieData.Length > 0)
                {
                    cookies = new CookieContainer();
                    cookies.SetCookies(uri, cookieData.ToString().Replace(';', ','));
                }
                return cookies;
            }
    
        }
    View Code

      

    只需在我原有代码加上这段

              

    try    
    { //跨域访问Cookie     
    var CookieContiner = NExplus.NSiter.CookieManger.GetUriCookieContainer(new Uri("http://i.tianqi.com/index.php?c=code&id=55"));
    tianqiRequest.CookieContainer = CookieContiner; }
    catch (Exception ex)
    { }

      

    这下ok了,搞定 完整效果

     

     直接用 iframe 引用我的地址就ok了

  • 相关阅读:
    Allegro PCB Design GXL (legacy) 使用slide无法将走线推挤到焊盘的原因
    OrCAD Capture CIS 16.6 导出BOM
    Altium Designer (17.0) 打印输出指定的层
    Allegro PCB Design GXL (legacy) 将指定的层导出为DXF
    Allegro PCB Design GXL (legacy) 设置十字大光标
    Allegro PCB Design GXL (legacy) 手动更改元器件引脚的网络
    magento产品导入时需要注意的事项
    magento url rewrite
    验证台湾同胞身份证信息
    IE8对css文件的限制
  • 原文地址:https://www.cnblogs.com/hzy168/p/3836607.html
Copyright © 2011-2022 走看看