【问题标题】:Online JSONP converter/wrapper在线 JSONP 转换器/包装器
【发布时间】:2011-01-09 01:24:42
【问题描述】:

我想获取文件源并将其包装在 JSONP 中。

例如,我想从我不拥有的主机中检索 pets.txt 作为文本。我想通过只使用客户端 JavaScript 来做到这一点。

我正在寻找可以将任何内容转换为 JSONP 的在线服务。


YQL

Yahoo Query Language 就是其中之一。

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D"http://elv1s.ru/x/pets.txt"&format=json&callback=grab

如果 URL 未被 robots.txt 阻止,则此方法有效。 YQL 有respect to robots.txt。我无法获取 http://userscripts.org/scripts/source/62706.user.js,因为它已通过 robots.txt 阻止。

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D"http://userscripts.org/scripts/source/62706.user.js"&format=json&callback=grab

"forbidden":"robots.txt 域禁止抓取 url:http://userscripts.org/scripts/source/62706.user.js"


所以我正在寻找其他解决方案。

【问题讨论】:

标签: web-services json cross-domain jsonp xss


【解决方案1】:

我构建了 jsonpwrapper.com

它比YQL不稳定且慢,但它不关心robots.txt。

【讨论】:

  • 一旦有足够多的用户使用您的包装器,您是否会发疯并入侵每个人的网站 ;) ?
  • 我似乎无法让它与我需要这样一个代理的 JSON 资源一起工作:http://airportcode.riobard.com/airport/FRA?fmt=JSON
  • 您的域是否过期并被停放??
【解决方案2】:

这是另一个更快的,基于 DigitalOcean 和 CloudFlare,利用缓存等:http://json2jsonp.com

【讨论】:

    【解决方案3】:

    诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺。不,请;不。那不是 JSONP,它是 javascript 执行一个以对象为参数的函数,其中包含更多的 javascript。啊!

    这是 JSON,因为它只是一个对象:

    {
        'one': 1,
        'two': 2,
        'three':3
    }
    

    这是 JSONP,因为它只是通过函数传递的一个对象;如果你去http://somesite/get_some_object?jsonp=grab,服务器会返回:

    grab({
        'one': 1,
        'two': 2,
        'three':3
    });
    

    这根本不是 JSON。这只是 Javascript:

    alert("hello");
    

    还有这个? Javascript 代码存储在一个对象中的字符串(哎呀!)中,传递给一个应该评估字符串的函数(但它可能会也可能不会):

    grab({"body": "alert(\"Hello!\");\n"});
    

    看看那些分号和反斜杠!我从这种东西中得到噩梦。它就像一个写得很糟糕的 Lisp 宏,因为它比它需要(而且应该!)复杂得多。相反,请在您的代码中定义一个名为 grab 的函数:

    function grab(message) {
        alert(message.body);
    }
    

    然后使用 JSONP 让服务器返回:

    grab({body: "Hello!"});
    

    不要让服务器决定如何运行您的网页 相反,让您的网页决定如何运行网页并让服务器填写空白。

    至于这样的在线服务?我不知道,对不起

    【讨论】:

    • 哦,我的例子真的很糟糕。我已将 elv1s.ru/x/hello.js 替换为 elv1s.ru/x/hi.txt
    • OHHHHHHHHHHHH 哦哦哦!你只是想包装一个文件,而不是更多的 javascript。对不起,那次卑鄙的小讲座,我现在看到了。
    【解决方案4】:

    我不确定你想在这里做什么,但没有人会使用这样的东西。没有人会相信您的服务始终按应有的方式执行并输出预期的 JavaScript 代码。你看到雅虎这样做是因为人们信任雅虎,但他们不会信任你。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多