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);
- }
- }
问题搞定了,以为可以皆大欢喜了,
就在高兴的时候发现,点击枣庄,修改
点保存, 怎还是枣庄,奇怪从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 = ;
- StringBuilder cookieData = new StringBuilder(datasize);
- if (!InternetGetCookie(uri.ToString(), null, cookieData,
- ref datasize))
- {
- if (datasize < )
- return null;
- // 确信有足够大的空间来容纳Cookie数据。
- cookieData = new StringBuilder(datasize);
- if (!InternetGetCookie(uri.ToString(), null, cookieData,
- ref datasize))
- return null;
- }
- if (cookieData.Length > )
- {
- cookies = new CookieContainer();
- cookies.SetCookies(uri, cookieData.ToString().Replace(';', ','));
- }
- return cookies;
- }
- }
只需在我原有代码加上这段
- 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了
asp.net 调用天气所遇到的问题的更多相关文章
- ASP.NET调用Web Service
1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...
- Asp.net调用百度搜索引擎
ASP.NET 调用百度搜索引擎 百度搜索引擎提供了一段嵌入到页面中的代码 <form action="http://www.baidu.com/baidu" target= ...
- 在ASP中调用DLL的方法
.net的dll已经不是严格意义上的动态连接库了,而是一个类或者类库.它是不能直接在ASP.VB等其它的应用环境中使用的. 我们可以通过COM包装器(COM callable wrapper (C ...
- Asp.NET调用百度翻译
Asp.NET调用百度翻译,图示: HTML: <%@ Page Language="C#" AutoEventWireup="true" CodeFil ...
- Asp.Net调用Office组件操作时的DCOM配置 (转)
Asp.Net调用Office组件操作时的DCOM配置 http://blog.csdn.net/gz775/article/details/6447758 在项目中将数据导出为Excel格式时出现“ ...
- asp.net调用前台js调用后台代码分享
asp.net调用前台js调用后台代码分享 C#前台js调用后台代码前台js<script type="text/javascript" language="jav ...
- asp.net调用opencv类库,实现图像处理显示
asp.net调用opencv类库,实现图像处理显示 原理上来说,通过dll的调用,无论是asp.net还是winform都可以调用opencv及其类库.但是在实现的过程还是有许 ...
- 利用C++调用天气webservice-gSOAP方法
首先需要下载一个gSOAP工具包 下载路径为:https://sourceforge.NET/projects/gsoap2/ 至于有关于gSOAP的一些用法和包含的文件的说明可从官网查看:http: ...
- asp 按钮 调用ajax时 会出现返回错误,尽量使用html按钮进行调用
asp 按钮 调用ajax时 会出现返回错误,尽量使用html按钮进行调用
随机推荐
- Android 开发无线调试
在进行android开发的时候有时候总是连接不上设备,因为设备的USB进行频繁插拔之后会导致一定的损坏.所以在设备已经无法利用数据线进行连接开发工具的时候就需要有那么一个功能,那就是无线调试,是不是感 ...
- 201512读书分享——读《做自己的No.1》“哪一天”是永远不会到来的
在看这本书的同时,最近也看了一部电影叫做<令人怦然心动的人生整理魔法>,讲一个女孩子平常不善收理,然后房间和人生乱七八糟,她总想着“等哪一天有空了就收拾”.但是,最终一句话打醒了——“哪一 ...
- HDOJ(HDU) 2148 Score(比较、)
Problem Description 转眼又到了一年的年末,Lele又一次迎来了期末考试.虽然说每年都要考试,不过今年的这场考试对Lele来说却意义重大. 因为经济原因,如果今年没有排在班级前几名, ...
- CodeForces 587A
题目链接: http://codeforces.com/problemset/problem/587/A 题意: 输入n个数,在这n个数中,寻找有多少个数不能消除掉 消除方法:两个相同的数消除后,生成 ...
- JAVA工程师面试总结
HR面: 你为什么要离职?如果是公司层面的,公司为什么要这么做? 你的理想薪资?你觉得你有什么优势胜任你应聘的工作? 你的未来发展规划? BOSS面: 项目的东西,hibernate调优?使用了什么数 ...
- SRM 403(1-250pt, 1-500pt)
DIV1 250pt 题意:称各个数位只含有4和7的数为lucky number,给定a,b,求[a, b]中的lucky number有多少个.a, b <= 10^9 解法:很明显的数位dp ...
- 301重定向与CNAME
CNAME记录是域名指向另一个域名A记录是域名指向IP地址URL跳转是打开这个网址的时候会跳转到另一个指定的网址,URL跳转分为301永久重定向和302临时重定向. 301永久重定向会使搜索引擎抓取新 ...
- 快速了解常用XHTML基础
运行效果: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- Excel2003读取sqlserver数据库表数据(图)
- 基于库zkclient 的leader选举代码实现
利用了zookeeper临时节点,在当连接或session断掉时被删除这一特性来做选举.(简单简单互斥锁) 查了下网上的做法. 大致流程: <1>判定是否存在/wzgtest路径 < ...