请求不同域的数据方法:requests Jsonp cors
在需要访问不同域的接口的数据的时候,一般有两种方式:
第一种:
使用requests模块,在业务逻辑中直接访问别的域的接口,获取数据,然后将返回的数据显示到前端页面上;
这个时候,数据访问的流程是: 客户端-->server请求其他域的接口--->server接收返回的数据--->将数据显示在前端或其他任意地方
import requests def req(request):
response = requests.get('http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0')
# print(response.content) #字节
response.encoding = 'utf-8'
# print(response.text) #字符串
return render(request,'req.html',{'result':response.text})
前端获取接收的字符串如下,是utf-8编码格式的

第二种:
直接使用js在前端页面请求其他域的接口,获取数据,最长用的是jsonp;
jsonp请求的原理:浏览器具有同源策略,对于ajax请求,不接受不同域的数据,而对于script标签没有此约束,在创建script标签的src属性的时候,页面在加载src的链接的时候,也会执行(发送链接的请求)链接的地址,如果链接是http get的接口,会返回对应的数据,这样就实现了获取不同域的接口数据的目的了;
需要注意的是:接口返回的数据,一定要符合js格式,否则数据没有办法被处理,一般我们在src的get请求链接,会携带参数?callback=list,使用callback表示需要被返回的数据的格式,这样就可以在定义专门处理返回的数据的方法了; jsonp只能发送get请求,不能发送其他的请求;
1、使用XMLhttprequest对象发送jsonp请求;
<h1>后台获取的结果</h1>
{{ result }}
<h1>js获取的结果</h1>
<input type="button" value="获取数据" onclick="getContent();">
<div id="container"></div>
<script>
function getContent() {
/*
var xhr = new XMLHttpRequest();
xhr.open('GET','http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0');
xhr.onreadystatechange = function () {
console.log(xhr.responseText);
};
xhr.send()
*/
var tag = document.createElement('script');
tag.src = 'http://www.jxntv.cn/data/jmd-jxtv2.html?callback=list_=145376870403'; //在创建src属性的时候,就会发送请求
document.head.appendChild(tag); //加载完script之后,再删除
document.head.removeChild(tag);
} function list(arg) {
console.log(arg);
}
</script>
使用jquery+jsonp请求数据如下,效果和上面的代码相同:
function list(arg) {
console.log(arg);
}
function getContent() {
$.ajax({
url : 'http://www.jxntv.cn/data/jmd-jxtv2.html?callback=list_=145376870403',
type : 'POST', //所有的jsonp都是get请求,即使是post请求,也会转换为get请求;
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback:'list'
})
}
获取数据如下:

第三种:
cors:跨域资源共享,就是在server端设置响应头来实现的;
参考博客:http://www.cnblogs.com/wupeiqi/articles/5703697.html
请求不同域的数据方法:requests Jsonp cors的更多相关文章
- 跨域问题及其解决方法(JSONP&CORS)
一.什么是跨域 当a.qq.com域名下的页⾯或脚本试图去请求b.qq.com域名下的资源时,就是典型的跨域行为.跨域的定义从受限范围可以分为两种,⼴义跨域和狭义跨域. (一)广义跨域 ⼴义跨域通常包 ...
- 解决Ajax同源政策的方法【JSONP + CORS + 服务器端解决方案】
解决Ajax同源政策的方法 使用JSONP解决同源限制问题 jsonp是json with padding的缩写,它不属于Ajax请求,但它可以模以Ajax请求.\ 步骤 1.将不同源的服务器端请求地 ...
- express 请求跨域后端解决方法CORS
CORS全称Cross-Origin Resource Sharing,是HTML5规范定义的如何跨域访问资源. Origin表示本域,也就是浏览器当前页面的域.当JavaScript向外域(如sin ...
- html Js跨域提交数据方法,跨域提交数据后台获取不到数据
MVC实现方式:(后台获取不到方法请参考下面js) [ActionAllowOrigin][HttpPost]public JsonResult Cooperation() { return json ...
- easy ui Tree请求跨域数据
扯淡篇: jQuery EasyUI为提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,validatebox,datagrid,window,t ...
- jquery的ajax异步请求接收返回json数据
http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...
- web三种跨域请求数据方法
以下测试代码使用php,浏览器测试使用IE9,chrome,firefox,safari <!DOCTYPE HTML> <html> <head> < ...
- JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
随机推荐
- css后代选择器
后代选择器: <p><em>CSS</em>层叠样式</p> 使用后代选择器设置,之间用空格隔开: p em{font-size:40px;} 例子: ...
- 着色器语言 GLSL (opengl-shader-language)入门大全
基本类型: 类型 说明 void 空类型,即不返回任何值 bool 布尔类型 true,false int 带符号的整数 signed integer float 带符号的浮点数 floating s ...
- js初识1
JavaScript 1.定义:可以嵌入HTML文档,载体是浏览器,解释型脚本语言 基于对象和事件驱动 2.注释方式 1.// 2./**/ 3./** */文档注释,API就是这么生成的. 3.引入 ...
- 《从Lucene到Elasticsearch:全文检索实战》学习笔记一
今天,我主要给大家讲一下信息检索概念. 信息检索: 互联网时代的飞速发展使人们进入了信息爆炸时代,据统计全球的互联网用户已达到30亿,在各个网站及移动app在每个分钟 产生的数据量是巨大的,从而导致数 ...
- MySQL5.7.32 通用版本安装
1 上传镜像,配置好yum源 2 下载MySQL相关的包 https://dev.mysql.com/downloads/mysql/ 3 解压安装: tar -zxvf mysql-5.7.23- ...
- 巡风安装配置 -windows
巡风是一款适用于企业内网的漏洞快速应急.巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表. 其主体分为两部分:网络资产识别引擎,漏 ...
- python------SocketServer (0809)
socket(一对一) 与socketserver 一.socketserver 1. 正式定义:The socketserver module simplifies the task of writ ...
- 活学活用wxPython基础框架
看活活用wxpython这本书,基本框架是这样子的,这里有定义输出,然后打印出整个流程,可以看到是怎样执行的,明天请假了,五一回去玩几天,哈哈,估计假期过来都忘了 import wx import s ...
- webpack 中,module、chunk、bundle 的区别(待补充)
项目 区别 module 是开发中的单个模块 chunk 中文意思是"块",是指 webpack 在进行模块依赖分析的时候,代码分割出来的代码块 bundle
- Tomcat虚拟根目录与虚拟目录
tomcat版本:apache-tomcat-7.0.42 参考:http://blog.csdn.net/pangdingshan/article/details/7214786 一.虚拟根目录 1 ...