能够将特定 IP 绑定为源地址(对于具有多个 IP 地址的主机)会很棒。
有趣的。 您如何看待使用情况?
^ shazow/urllib3#9
目标是使用与特定国家/地区关联的 IP 编写爬虫。 但我不知道它将如何在 API 级别上使用。
难道您不能只向具有特定Host
标头的 IP 发送请求吗?
不,因为它在网络服务器日志中有特定的 IP(使用 GeoIP 之类的工具反向到特定的国家)。
我不跟。
>>> requests.get('http://184.106.67.239', headers={'host': 'ci.kennethreitz.com'})
<Response [200]>
import socket
import urllib2
true_socket = socket.socket
def make_bound_socket(source_ip):
def bound_socket(*a, **k):
sock = true_socket(*a, **k)
sock.bind((source_ip, 0))
return sock
return bound_socket
socket.socket = make_bound_socket('<some source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()
socket.socket = make_bound_socket('<some other source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()
如果从两个源 ip 号出去的流量通过两个不同的公共 ip 号出去,则应该在响应的源字段中看到这些不同的公共号。
我认为这超出了范围。
对于对此仍然感兴趣的人,您可能想看看 urlib3 的 HttpConnectionPool,特别是在新的 httplib/http.client HttpConnections 被启动的地方,以便您可以传入 source_address。 如果您这样做,那么您可以继续在请求的请求模型中公开它,并根据需要使用它。
对于那些从谷歌来到这里的人,你需要关注这个: https :
这应该重新打开 - 它没有超出范围,并且在使用 VPN 内的主机时非常必要。
根据当前和远程网络地址空间的具体情况,经常需要从绑定到 VPN 设置的接口的 IP 发送请求。 或者更改路由表。 这至少适用于在 Mac 上使用 NetExtender。
许多网络程序如 ssh 和 curl 支持将接口设置为使用/绑定到接口的 IP。
@petri鉴于 Requests 项目的范围完全由 Kenneth 定义,您关于这并未超出范围的断言是不正确的。 =)
具体来说,我们认为它超出了核心请求项目的范围。 不过,你还是可以做到的,而且难度也不大。 这个讨论涵盖了如何做到这一点。
很好 - 我不知道请求中有这种机制。 谢谢!
import socket import urllib2 true_socket = socket.socket def make_bound_socket(source_ip): def bound_socket(*a, **k): sock = true_socket(*a, **k) sock.bind((source_ip, 0)) return sock return bound_socket socket.socket = make_bound_socket('<some source ip>') print urllib2.urlopen('http://httpbin.org/ip').read() socket.socket = make_bound_socket('<some other source ip>') print urllib2.urlopen('http://httpbin.org/ip').read()
如果从两个源 ip 号出去的流量通过两个不同的公共 ip 号出去,则应该在响应的源字段中看到这些不同的公共号。
只是想让你知道我一直在网上搜索,这是唯一对我有用的解决方案。
最有用的评论
如果从两个源 ip 号出去的流量通过两个不同的公共 ip 号出去,则应该在响应的源字段中看到这些不同的公共号。