从客户端用Python发出urllib请求

从客户端用Python发出urllib请求,python,urllib2,urllib,Python,Urllib2,Urllib,我已经编写了一个Python应用程序,该应用程序使用urllib2库发出web请求,然后它会刮取数据。我可以将其部署为web应用程序,这意味着所有urllib2请求都要通过我的web服务器。这会导致服务器的IP被禁止的危险,因为许多用户都有大量的web请求。另一个选项是创建我不想做的桌面应用程序。是否有任何方法可以部署我的应用程序,以便通过客户端获取web请求。一种方法是使用Jython创建一个applet,但我已经了解到Java applet只能向其部署的服务器发出web请求,而避免这种情况的

我已经编写了一个Python应用程序,该应用程序使用urllib2库发出web请求,然后它会刮取数据。我可以将其部署为web应用程序,这意味着所有urllib2请求都要通过我的web服务器。这会导致服务器的IP被禁止的危险,因为许多用户都有大量的web请求。另一个选项是创建我不想做的桌面应用程序。是否有任何方法可以部署我的应用程序,以便通过客户端获取web请求。一种方法是使用Jython创建一个applet,但我已经了解到Java applet只能向其部署的服务器发出web请求,而避免这种情况的唯一方法是创建一个服务器端代理,这将使我们回到服务器ip被禁止的问题

这听起来像是一种不可能的情况,我可能最终会创建一个桌面应用程序,但我想问问是否有人知道另一种解决方案


谢谢。

您可能可以使用客户端JavaScript中的AJAX请求

  • 使用服务器→ 客户端通信,提供命令和必要的数据以发出请求
  • …然后使用从客户端到第三方服务器的AJAX通信

这取决于您打算执行的“刮取”形式:

  • 运行对第三方站点的AJAX调用时可能会遇到问题。请看
  • 另一种方法是在服务器端执行,但要缓存结果,这样就不会不必要地攻击第三方服务器

查看google代码上的DiggStriper。

你可以使用签名Java小程序,他们可以使用Java安全机制来访问任何站点。 本教程详细说明了您必须执行的操作:


Flash小程序也可以实现同样的功能。Javascript也被限制在发布的站点上,不允许被签名或像这样的安全异常,AFAIK。

不幸的是,AJAX意味着放弃python for Javascript,但这是将流量转移到客户端的唯一明智的方法。实际上,我有使用Silverlight+DLR+IronPython在客户端运行python的经验。但这意味着客户端应该安装Silverlight。所以最好还是坚持使用JavaScript。毕竟,一旦你明白了这一点,JS就不是那么糟糕的语言。我曾尝试在网上查找,但大多数人说JS不支持跨站点请求。使用服务器端代理也可以避免这种情况。没有代理就没有办法了吗?@mridang。嗯,如果你想请求的服务的作者在设计上不允许这样做,我恐怕没有代理就无法进行这样的调用,也就是说,他没有提供类似JSONP的东西来实现跨域调用。