首页 > 其他分享 >21 JSONP

21 JSONP

时间:2023-10-12 20:23:36浏览次数:41  
标签:21 cb JSONP callback json jsonp 字符串 data

JSONP

为了解决浏览器跨域问题. jquery提供了jsonp请求.

在网页端如果见到了服务器返回的数据是:

​ xxxxxxxxxxdjsfkldasjfkldasjklfjadsklfjasdlkj({json数据})

​ 在Preview里面可以像看到json一样去调试

這就是jsonp。 这东西依然是ajax.

jsonp的逻辑是. 在发送请求的时候. 带上一个callback字符串. 该字符串自动发送给服务器. 服务器返回数据的时候. 会带上该callback字符串. 我们在抓包中看到的就是这样的效果:

image-20220609173715291

在Python中. 接下来, 我们还原一下该效果.

首先, 在flask中. 必须接收到前端返回的callback, 然后在返回数据的时候. 需要用前端返回的callback字符串. 将数据包裹

@app.route("/process_jsonp", methods=["GET"])
def process_jsonp():
    # 获取回调字符串
    cb = request.args.get("cb")
    print(cb)
    data = {
        "name": "alex",
        "age": 18
    }
    import json
    #      用回调字符串将真实要返回的数据包裹起来
    #      如果不包裹起來。前端ajax中的success将无法获取到数据
    return cb + "("+json.dumps(data)+")"

在发送ajax的时候. 需要指定dataType为jsonp, 以及自由配置回调函数的参数名

$(function(){
    $.ajax({
        url: "/process_jsonp",
        method:"get",
        // 典型, 京东.
        dataType: "jsonp", // 它的执行逻辑是. 请求服务上的一个js. 然后会自动执行该js.将js函数内的东西. 丢给success
        jsonp:"cb", // 传递给服务器的时候. 自动带上cb=xxxxxx  服务器端接收cb即可
        success: function(data){ // 此时data可以直接收取到数据
            console.log(data);
        }
    });
});

抓包效果:

image-20220609174324528

服务器处理cb时的效果:

image-20220609174352852

抓包中. 看到的服务器返回的数据

image-20220609174419304

success中接收到的数据效果

image-20220609174441431

我们以后见到这种网站. 如何处理?

首先, 固定好callback的值. 如上述案例. 我们就可以直接给出一个固定的cb值. 如果原网站就是固定的值. 此步骤可以忽略

http://127.0.0.1:5000/process_jsonp?cb=haha&_=1654767783595

然后, 得到返回值后. 用正则. 或者字符串操作. 即可处理.

import requests
import re

url = "http://127.0.0.1:5000/abc"
params = {
    "callback": "jQuery36002530792718956838_1681908950457",
    "_": "1681908950461"  # 它是为了防止浏览器缓存的. 实际上和服务器无关
}

resp = requests.get(url, params=params)
# 自己的服务器随便搞

print(resp.text)
# 如何提取jsonp中有用的数据
obj = re.compile(r'\((?P<code>.*)\)')  # 1
code = obj.search(resp.text).group("code")
print(code)
# 后续处理用, json或者execjs来处理成python的dict. 

标签:21,cb,JSONP,callback,json,jsonp,字符串,data
From: https://www.cnblogs.com/zczhaod/p/17760449.html

相关文章

  • 2020,2021 年 CF 简单题精选 做题记录
    2023.10.12开坑,打了几场div.2之后一直觉得这方面水平差太多,今天刚好在洛谷看到这个题单就准备开始做了,里面从黄到黑都有,我会尽量都做,并在这里记录。总共49题,我可能平时有时间就做一两题,估计是个长期坑了((。题单链接[Y]表示独立完成,[N]表示看题解之后完成。......
  • 2020-2021 ICPC, NERC, Southern and Volga Russian Regional Contest (Online Mirror
    有五种种类的垃圾,数量分别为\(a_1,a_2,a_3,a_4,a_5\)。第一种为纸质垃圾第二种为塑料垃圾第三种双非垃圾第四种基本纸质垃圾第五种基本塑料垃圾有三种垃圾桶,容量分别为\(c_1,c_2,c_3\)。第一种垃圾桶可以放入:纸质垃圾和基本纸质垃圾第二种垃圾桶可以放入:塑料......
  • 测试4 20211102尹子扬静态库的测试
    1.首先,编译你的模块源代码成为目标文件(.o文件)。例如,如果有一个模块名为mymath.c,你可以使用以下命令来生成目标文件:点击查看代码gcc-cmymath.c-omymath.o请确保你以适当的方式编译所有的模块源代码文件。2.将所有目标文件打包成一个静态库文件。你可以使用ar命令来......
  • GitHub发布2021年度报告:中国开发者数量全球第2 ,最受欢迎的语言是
    临近年底,各大平台年终报告频频发布。作为程序员,应该关注些什么呢?近日,全球最大开发者社区GitHub重磅发布了《2021年度Octoverse报告》,本报告首次结合了来自GitHub上,超过400万个代码库的数据,共有超过12000多名开发者参与问卷调查。在即将过去的2021年,开发者社区发生了哪些有趣......
  • Z2219. [ABC235E] MST + 1
      先写一发LCA#include<bits/stdc++.h>usingnamespacestd;intn,q,x,y,dep[500005],jump[500005][22];vector<int>d[500005];voidfindep(intp,intf,intdp){ dep[p]=dp;//点p的深度为dp for(inti=0;i<=int(d[p].size()-1);i++) if(d[p][i]!=f) ......
  • 20230921 做题记录
    20230921做题记录目录20230921做题记录总结1P2863[USACO06JAN]TheCowPromS2P2746[USACO5.3]校园网NetworkofSchools3P1407[国家集训队]稳定婚姻4P1072[NOIP2009提高组]Hankson的趣味题总结总计完成\(3+4\)题上午校内练习赛,下午改了上午的题,晚上继续......
  • CSP/NOIP 2020,2021,2022
    CSP-S2020儒略历可以发现不管是缺的\(10\)天还是什么特殊规定,前面的天数都比较少,直接暴力模拟前头就行。可以直接暴力模拟\(3\times10^6\)天,然后接下来考虑如果要连着跳\(k\)天,首先如果\(k\le400\)就暴力跳\(k\)次,否则我们先跳若干步到\(1\)月\(1\)日。然后可......
  • P8313 [COCI2021-2022#4] Izbori
    \(\text{Links}\)原题传送门题意求给定序列中有多少个子区间满足众数出现次数严格大于区间长度的一半。题解题目要求满足条件的子区间,一个很直接的想法是每次固定左(右)端点,求有多少个右(左)可以与其匹配对答案造成贡献。那么考虑一个暴力做法:每次固定左端点,然后往后面一直扫,......
  • NXP ls1021a coremark跑分
    RELEASE版本2Kperformancerunparametersforcoremark.CoreMarkSize:666Totalticks:42504300Totaltime(secs):42.504300Iterations/Sec:2352.703138Iterations:100000Compilerversion:GCC4.9.320150311(prerelease)Compilerflags:-o3......
  • 2021 CCPC 桂林 ADEGIK
    2021CCPC桂林ADEGIKhttps://codeforces.com/gym/103409女队vp。就做了四道比较签到的题,后续补了两题,感觉比较考察思维。本身的代码不难写。其中,D题要能明白那个贪心的思想,尽量把大的放在前面,并且要知道怎么才能把大的放在前面!!!K题非常神奇,想了半天但其实是直接在边权为1的最短......