如何创建跨域HTTP请求

Midnight_Blaze

我有一个网站,我需要一种通过http请求从其他网站获取html数据的方法,并且我一直在寻找实现它的方法,并且大多数情况下是通过ajax调用来实现的。

一个ajax调用被链接阻止,所以我想尝试一个普通的跨域http请求,并希望它不会被一种或另一种方式阻止。

勒内

如果您正在运行服务器并且能够在其上运行代码,则可以在HTTP调用服务器端进行操作。请记住,尽管大多数站点每个IP地址只允许这么多的呼叫,所以您不能通过这种方式为很多用户提供服务。

这是一个简单的httpListener,当QueryString包含?site=http://linkedin.com以下内容时,它会下载网站内容

// setup an listener
using(var listener = new HttpListener())
{
    // on port 8080
    listener.Prefixes.Add("http://+:8080/");
    listener.Start();
    while(true) 
    {
        // wait for a connect
        var ctx = listener.GetContext();
        var req = ctx.Request;
        var resp = ctx.Response;
        // default page 
        var cnt = "<html><body><a href=\"/?site=http://linkedin.com\">click me</a> </body></html>";
        foreach(var key in req.QueryString.Keys)
        {
          if (key!=null) 
          {
             // if the url contains ?site=some url to an site
            switch(key.ToString()) 
            {
                case "site":
                // lets download
                var wc = new WebClient();
                // store html in cnt
                cnt = wc.DownloadString(req.QueryString[key.ToString()]);
                // when needed you can do caching or processing here
                // of the results, depending on your needs
                break;
                default:
                break;
            }
          }
        }
        // output whatever is in cnt to the calling browser
        using(var sw = new StreamWriter(resp.OutputStream))
        {
            sw.Write(cnt);
        }
    }
}

为了使上面的代码起作用,如果您在开发框中,则可能必须设置URL的权限:

netsh http add urlacl url=http://+:8080/ user=Everyone   listen=yes

在生产中,为用户使用合理的值。

设置好之后,运行上面的代码并将您的浏览器指向

 http://localhost:8080/

(注意/末尾)

您将获得一个包含链接的简单页面:

点击我

单击该链接将向httplistener发送一个新请求,但这一次带有查询字符串site=http://linkedin.com服务器端代码将从给定的URL中获取http内容,在本例中为LinkedIn.com。结果是一对一地发送回浏览器,但是您可以根据需要进行后处理/缓存等。

法律声明/免责声明

大多数网站不喜欢以这种方式被抓取,他们的服务条款实际上可能禁止这样做。确保您不会做任何会损害站点可靠性或导致对您采取法律行动的非法行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS的跨域$ http请求

来自分类Dev

跨域$ http请求AngularJS

来自分类Dev

如何使用http-client向Aurelia请求跨域

来自分类Dev

跨域HTTP请求在AngularJS中失败

来自分类Dev

使用AJAX发送HTTP跨域请求

来自分类Dev

使用$ http服务的AngularJS跨域请求

来自分类Dev

使用$ http服务的AngularJS跨域请求

来自分类Dev

如何跨域发送Ajax请求?

来自分类Dev

如何发送跨域Ajax请求

来自分类Dev

使用 python 请求发送跨域请求:HTTP for Humans

来自分类Dev

跨域请求被阻止

来自分类Dev

跨域请求被阻止:

来自分类Dev

什么是跨域请求

来自分类Dev

跨域请求被阻止

来自分类Dev

jQuery跨域请求

来自分类Dev

Http2跨域推送请求是否可能?

来自分类Dev

AngularJS http.get()跨域请求被阻止

来自分类Dev

如何在跨域请求中保留会话数据?

来自分类Dev

如何解决“跨域请求被阻止”错误?

来自分类Dev

如何在compojure中启用跨域请求?

来自分类Dev

如何解决Firefox中的跨域请求阻止错误

来自分类Dev

如何在JavaScript / Chrome中本地执行跨域请求?

来自分类Dev

如何使用jquery进行跨域ajax发布请求?

来自分类Dev

如何避免ajax跨域请求上的javascript错误

来自分类Dev

请求 Kylo API 时如何修复跨域错误

来自分类Dev

Wikipedia API +跨域请求

来自分类Dev

禁用跨域Ajax请求

来自分类Dev

PHP跨域请求被阻止

来自分类Dev

跨域请求阻止的Elasticsearch