javascript - 如何创建跨域HTTP请求

标签 javascript c# http-request

我有一个网站,我需要一种通过 http 请求从不同网站获取 html 数据的方法,我已经寻找了实现它的方法,大多数人说通过 ajax 调用来实现。

ajax 调用被 linked in 阻止,所以我想尝试一个普通的跨域 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/

(注意末尾的/)

您将获得一个带有链接的简单页面:

click me

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

法律声明/免责声明

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

关于javascript - 如何创建跨域HTTP请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42326320/

相关文章:

javascript - Node.js 请求模块获取现代版本的网站

javascript - 如何连续排列一个 div 元素?

javascript - 将元素 href 设置为其他元素 id

c# - 更新表时必须声明标量变量@

c# - 为什么不能转换此double值

html - Material Design Lite 表单按钮不提交任何内容

python - 将 header 与 Python 请求库的 get 方法一起使用

javascript - 创建新日期对象时不一致

javascript - websockets 是否与 SPDY 一起工作?

c# - 更新时从 GridView 内的下拉列表中获取选定的值