在线JSONP转换器/包装器

时间:2010-01-25 10:57:54

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

我想获取文件源并将其包装在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

如果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

  

“禁止”:“域名的robots.txt禁止抓取网址:http://userscripts.org/scripts/source/62706.user.js


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

4 个答案:

答案 0 :(得分:5)

我构建了 jsonpwrapper.com

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

不不不。不,请随便没有。这不是JSONP,它是javascript执行一个函数,一个对象作为其包含更多javascript的参数。 AAAH!

这是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");

这个?存储在对象内的字符串(ouch!)内的Javascript代码传递给应该评估字符串的函数(但可能会也可能不会):

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

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

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

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

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

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

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

答案 3 :(得分:-2)

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