我在用webpy做一个小网站。当我想使用oauth时,我发现防火墙会停止对任何站点的http请求,我甚至不能使用ie来浏览internet。
所以我要求aministrator为我打开一些端口,但我不知道python或ie将使用哪些端口来发送http请求。
谢谢!
最佳答案
我想你说的是远程端口。在这种情况下,只要告诉管理员打开标准的web端口。真的,如果你的管理员不知道如何让ie通过防火墙工作,他是没有希望的。我建议走到街上随便找几个人,说“80443”,直到有人抬起头来,然后解雇你的管理员,雇用那个人;他不会更糟的。
如果您的管理员知道他在做什么,并且希望您使用HTTP代理而不是直接连接,请他在伊江为您设置代理,查看他所使用的设置,然后返回这里,查找如何在Python中使用HTTP代理(在这方面有很多答案),如果您卡住了,请求帮助。
如果你说的是本地端口,因为你有一个疯狂的防火墙,他们将随机挑选一些大范围。如果你想覆盖每一个普通的操作系统,你需要打开1024-65535的所有操作系统,尽管如果你只需要处理一个平台,大多数操作系统使用的范围比这个小,如果机器除了运行你的程序之外不会做太多的事,大多数操作系统都有办法将它限制在更小的范围内(例如,在windows上只有255个端口)。谷歌“短暂港口”了解详情。
如果需要限制本地端口,关键是在调用bind
之前在套接字上调用connect
。如果你认为你说的是本地端口,你可能错了。去问问你的管理员(或者你刚雇的新管理员)并确保。但如果你是…
如果你使用的是urllib
/urllib2
,它没有任何方法可以做你想做的事情,所以你不能再这样做了。您可以下拉到httplib
,它允许您传递source_address
,一个(host, port)
元组,它将在连接之前用于绑定套接字。它不像你使用的那样简单,但是比从头实现http要容易得多。
您可能还想看看requests,我知道它有自己的native OAuth支持,并且可能有一种指定源地址的方法。(我没有看,但我通常发现,每当我想知道requests
是否可以做x时,它就可以,而且以我所想到的最明显的方式……)requests
的api通常类似于urllib2
时的urllib2
当urllib2
是理智的,当random.shuffle
是混乱的,所以通常很容易移植东西。
无论如何,不管您怎么做,您都必须考虑到一次只能将一个套接字绑定到同一个本地端口这一事实。那么,如果两个程序同时运行,并且它们都需要建立出站连接,而您的管理员只给了您一个端口,会发生什么?其中一个会失败。可以接受吗?
如果没有,您真正需要做的是打开一个端口范围,并编写对该范围执行bind
操作的代码,然后尝试将其httplib
操作,直到成功为止。这意味着您将需要一个http库,它允许您输入一个套接字工厂或一个预打开的套接字,而不只是指定一个端口,而大多数端口都不指定,这可能意味着您将要破解一个源代码的副本。
如果所有其他操作都失败,则始终可以设置本地代理,该代理在向外代理时绑定到所需的任何源端口(或端口范围)。然后你就可以像现在一样使用你最喜欢的高级库,并连接到本地代理,防火墙无法分辨代理背后发生了什么。
如你所见,这并不容易。这主要是因为你很少这样。