由于在项目用了显示天气的功能,原有的调用方法 直接通过      <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 调用天气所遇到的问题的更多相关文章

  1. ASP.NET调用Web Service

    1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...

  2. Asp.net调用百度搜索引擎

    ASP.NET 调用百度搜索引擎 百度搜索引擎提供了一段嵌入到页面中的代码 <form action="http://www.baidu.com/baidu" target= ...

  3. 在ASP中调用DLL的方法

    .net的dll已经不是严格意义上的动态连接库了,而是一个类或者类库.它是不能直接在ASP.VB等其它的应用环境中使用的.   我们可以通过COM包装器(COM callable wrapper (C ...

  4. Asp.NET调用百度翻译

    Asp.NET调用百度翻译,图示: HTML: <%@ Page Language="C#" AutoEventWireup="true" CodeFil ...

  5. Asp.Net调用Office组件操作时的DCOM配置 (转)

    Asp.Net调用Office组件操作时的DCOM配置 http://blog.csdn.net/gz775/article/details/6447758 在项目中将数据导出为Excel格式时出现“ ...

  6. asp.net调用前台js调用后台代码分享

    asp.net调用前台js调用后台代码分享 C#前台js调用后台代码前台js<script type="text/javascript" language="jav ...

  7. asp.net调用opencv类库,实现图像处理显示

    asp.net调用opencv类库,实现图像处理显示     ​      原理上来说,通过dll的调用,无论是asp.net还是winform都可以调用opencv及其类库.但是在实现的过程还是有许 ...

  8. 利用C++调用天气webservice-gSOAP方法

    首先需要下载一个gSOAP工具包 下载路径为:https://sourceforge.NET/projects/gsoap2/ 至于有关于gSOAP的一些用法和包含的文件的说明可从官网查看:http: ...

  9. asp 按钮 调用ajax时 会出现返回错误,尽量使用html按钮进行调用

    asp 按钮 调用ajax时 会出现返回错误,尽量使用html按钮进行调用

随机推荐

  1. PHP删除数组中特定元素

    方法一: <?php $arr1 = array(1,3, 5,7,8); $key = array_search(3, $arr1); if ($key !== false) array_sp ...

  2. 字符串(LCT,后缀自动机):BZOJ 2555 SubString

    2555: SubString Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1620  Solved: 471 Description 懒得写背景了 ...

  3. linux下挂载另一系统硬盘。

    问题描述: Error mounting /dev/sda5 at /media/wangzheng/办公: Command-line `mount -t "ntfs" -o &q ...

  4. Ubuntu 14.04 dnw配置

    之前写的Ubuntu嵌入式环境搭建没有讲怎么配置dnw下载工具,使用dnw还得用红帽,今天配置好了ubuntu下的dnw,记录一下 首先先下载dnw的源码,这是我上传的提供给大家下载:http://p ...

  5. 带你一分钟理解 JavaScript 闭包

    什么是闭包? 先看一段代码: function a(){ var n = 0; function inc() { n++; console.log(n); } inc(); inc(); } a(); ...

  6. Linus:为何对象引用计数必须是原子的

    Linus大神又在rant了!这次的吐槽对象是时下很火热的并行技术(parellism),并直截了当地表示并行计算是浪费所有人时间(“The whole “let’s parallelize” thi ...

  7. 通过cocos2d-x的CCGLProgram和CCShaderCache的实现来分析OpenGL ES中的Shader编程

    在OpenGL ES中,Shader是着色器,包括两种:顶点着色器(Vertex Shader)和片元着色器(Fragment Shader).每个program对象有且仅有一个Vertex Shad ...

  8. Linux下生产者与消费者的线程实现

    代码见<现代操作系统> 第3版. 为了显示效果,添加了printf()函数来显示运行效果 #include<stdio.h> #include<pthread.h> ...

  9. hdu 4602 Partition (概率方法)

    Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  10. 2015移动安全挑战赛(阿里&看雪主办)第一题分析

    今天在网上看到了阿里移动安全比赛的第一次,并且说难度不大,便拿来看了看. 主体就是找出一个密码输进去,然后看正误. 这个题是纯Java层的一个题,也没用进行什么保护.可以直接反编译. 登陆Button ...