V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ilaipi
V2EX  ›  程序员

帮忙看下一个 jsonp 问题

  •  
  •   ilaipi ·
    ilaipi · 2017-05-04 01:39:42 +08:00 · 3593 次点击
    这是一个创建于 2771 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在爬一个网站,debug 了一下,看到这一步:


    这里写的是个 post 请求,但是在 network 面板看到的是一个 get 请求


    不是很明白 jsonp,如果我要模拟这个请求,用普通的 http post 可以吗?
    我用的是 nodejs+axios
    26 条回复    2017-05-19 16:49:46 +08:00
    FEDT
        1
    FEDT  
       2017-05-04 01:55:26 +08:00 via Android
    jsonp 只能是 get 请求吧
    zhihaofans
        2
    zhihaofans  
       2017-05-04 02:11:17 +08:00 via iPhone
    jsonp 只能 get 吧?
    你可以翻一翻文档 http://api.jquery.com
    think2011
        3
    think2011  
       2017-05-04 04:44:50 +08:00
    不能,你需要明白 jsonp 的原理。
    aaronlam
        4
    aaronlam  
       2017-05-04 08:34:27 +08:00 via iPhone
    jsonp 是动态添加 script 标签用的是 GET 请求
    DingJZ
        5
    DingJZ  
       2017-05-04 08:52:28 +08:00
    jsonp 肯定是 get
    LeeSeoung
        6
    LeeSeoung  
       2017-05-04 09:08:03 +08:00
    回复楼上各位 jsonp post 跨域方案: http://www.jb51.net/article/68980.htm
    jyz19880823
        7
    jyz19880823  
       2017-05-04 09:25:13 +08:00
    @LeeSeoung 这就不叫 jsonp 了吧
    wly19960911
        8
    wly19960911  
       2017-05-04 09:29:27 +08:00 via Android
    jsonp 不是 ajax,jsonp 不是 ajax,jsonp 不是 ajax,

    jQuery 把 jsonp 加入 ajax 的形式可能会误导人,
    f0rger
        9
    f0rger  
       2017-05-04 09:37:37 +08:00 via iPhone
    jsonp 只能是 get,上面那个跨域 post 的明显都改成 json 接收参数了。你们 2 个都好好了解一下 jsonp 吧
    ilaipi
        10
    ilaipi  
    OP
       2017-05-04 09:43:15 +08:00
    谢谢大家,不知道怎么说,感觉关注点有点偏了,是不是需要先弄清楚这个网站的这个 jsonp 请求,我模拟的时候一定也要是 jsonp 吗?
    我是在做小爬虫
    sliwey
        11
    sliwey  
       2017-05-04 09:59:14 +08:00
    @LeeSeoung #6 不是所有的跨域都叫 jsonp
    LeeSeoung
        12
    LeeSeoung  
       2017-05-04 10:05:31 +08:00
    #7 #9 #11 我说是跨域 POST 解决方案。。能好好理解清楚我说的意思不?
    LeeSeoung
        13
    LeeSeoung  
       2017-05-04 10:06:25 +08:00
    wuhuaji
        14
    wuhuaji  
       2017-05-04 10:08:10 +08:00
    https://whj.site/2016/04/15/how-to-cross-site/ 一篇文章看明白什么 jsonp 是如何工作的。
    huijiewei
        15
    huijiewei  
       2017-05-04 10:32:55 +08:00
    @LeeSeoung 这个不叫 JSONP 了好吗
    Jaylee
        16
    Jaylee  
       2017-05-04 11:11:16 +08:00
    @LeeSeoung 这叫 cors,跟 jsonp 半毛钱关系没有
    zhangsan
        17
    zhangsan  
       2017-05-04 11:16:09 +08:00   ❤️ 1
    你们的回复都笑死我了,啥是 jsonp,jsonp 是为了解决浏览器的同源策略,利用 js 的( src )可跨域属性实现的一种跨域请求方法。
    jsonp 只出现在 前端浏览器,跟后端一点关系都没有。

    后端想 post 还 get 完全是看心情。

    回复一句“ jsonp 肯定是 get 的”,要搞懂本质啊
    lilydjwg
        18
    lilydjwg  
       2017-05-04 11:16:17 +08:00
    @LeeSeoung #12 那个是跨域 POST,搜「 MDN CORS 」有详细的教程。jsonp 只能 GET,因为 HTML 加载脚本只能用 GET 方式。

    你想要 POST,请使用「跨域 POST 」的方式,不要用「 jsonp 」。
    lilydjwg
        19
    lilydjwg  
       2017-05-04 11:18:34 +08:00   ❤️ 1
    如果你要模拟这个请求,用普通的 HTTP GET 就行了。因为它就是普通的 HTTP GET。你在网络请求上点右键,可以选择「复制为 cURL 命令」,就能得到这个请求发出的具体方法。
    LeeSeoung
        20
    LeeSeoung  
       2017-05-04 11:21:29 +08:00
    @lilydjwg 怪我表述不清。。之前想跨域 post 发现 jsonp 搞不定 POST,后来发现上面那篇文章搞定了跨域 POST
    wc951
        21
    wc951  
       2017-05-04 13:42:21 +08:00 via Android
    谁说 jsonp 只是前端的事,后端不提供支持,你拿头去跨域回调
    mingyun
        22
    mingyun  
       2017-05-04 23:15:52 +08:00
    17 楼正解
    surmon
        23
    surmon  
       2017-05-05 10:02:49 +08:00
    @LeeSeoung 那哪是 JSONP 搞定的,是 CORS
    ilaipi
        24
    ilaipi  
    OP
       2017-05-06 05:23:41 +08:00
    @lilydjwg 这个网站用 jq 的 ajax 方法,指定 method 是 post,这样的请求不算「跨域 POST 」的方式么?虽然代码里写了`method: 'post'`,但是又写了`dataType: jsonp`,然后就会让`method: post`失效了么?

    好消息是,刚刚我模拟这个 get 请求成功了。之前一直写成 post,总是模拟不成功,改成 get 成功了,太棒了。
    lilydjwg
        25
    lilydjwg  
       2017-05-07 20:01:47 +08:00
    @ilaipi #24 上边已经说过很多遍了,jsonp 只支持 GET。我也不知道那样做 jQuery 是怎么想的,反正实际发出的也是 GET 请求。

    请你相信这里的人的能力。就算还不到参与 W3C 标准讨论和制定的程序,至少阅读并理解 W3C 标准是毫无问题的。
    mkeith
        26
    mkeith  
       2017-05-19 16:49:46 +08:00
    @zhangsan jsonp 是使用动态添加 javascript 标签实现的啊???
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3600 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:42 · PVG 18:42 · LAX 02:42 · JFK 05:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.