从外部 URL 获取 Http Get 请求

3

我需要创建一个函数,用于向公共URL发出GET请求,并返回一段纯文本。

根据这个返回值,我需要进行验证。

我尝试使用Dojo的ajax get方法来实现,但由于是不同的域,它将无法工作(仅在Internet Explorer中有效)。

我该如何调用外部域并处理其响应?

URL将类似于以下内容:

http://my.socket:8080/?option1=1&option2=2

这可以使用ajax或仅使用Java类。

2个回答

2

ajax在客户端工作,这意味着您无法进行外部域的ajax调用,因为存在同源策略

如果将GET调用写在应用程序服务器端,并通过ajax调用您的应用程序作为网关,从远程服务器获取数据,则这将是一种不错的技术。


听起来不错,你有没有想过如何在服务器端处理从URL接收到的文本呢?我可以像这样访问外部URL,但是我该如何处理回答呢?URL url = new URL("http://socket."); URLConnection conn = url.openConnection(); conn.setDoOutput(true);BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));in.close(); - user1725253
基本上,您需要编写代码,当您导航到yourdomain.com/gatewaycode/maybemoreparams时将执行该代码,并打印外部域返回的数据。如果您能够做到这一点,那么您将对yourdomain.com/gatewaycode/maybemoreparams进行ajax调用。我是否从您的问题中漏掉了什么?您在服务器端使用Java吗? - MySqlError
是的,这个应用程序是用Java编写的。我喜欢在服务器端进行调用,然后通过Ajax调用我的同一域名。但我不确定如何从服务器端进行调用。 - user1725253
请参考以下链接,了解如何在Java中发送HTTP请求:https://dev59.com/IHM_5IYBdhLWcg3wfTI0 - MySqlError

0
由于同源策略,您无法在跨域之间进行简单的 Ajax 调用。
您可以使用 Ajax 调用位于相同域上的自己的服务器页面,该页面可以执行 HTTP get 操作并为您获取内容。
或者,您可以使用 YQL
var url = 'http://my.socket:8080/?option1=1&option2=2'; // website you want to scrape
var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from html where url="' + url + '"') + '&format=json&callback=?';  
$.getJSON(yql,function(data){  
    if(data.query.results){
        var result = data.query.results.double.content.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '');
        alert(result);
    }
});

参考资料


我不知道纯文本(但您可以在您的端过滤), 但您可以获取XML。只需将此行更改为 select * from xml....,而不是 select * from html.... - Jashwant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接