13

我有一个脚本,它使用urllib2.

我使用Stack Overflow 上其他地方建议的技巧将另一个 ip 绑定到应用程序,我的计算机有两个 ip 地址(IP A 和 IP B)。

我想改用requests图书馆。有谁知道我如何使用该库实现相同的功能?

4

2 回答 2

19

查看该requests模块,它看起来像是httplib用于发送 http 请求。httplib用于socket.create_connection()连接 www 主机。

知道这一点并遵循您提供的链接中的猴子修补方法:

import socket

real_create_conn = socket.create_connection

def set_src_addr(*args):
    address, timeout = args[0], args[1]
    source_address = ('IP_ADDR_TO_BIND_TO', 0)
    return real_create_conn(address, timeout, source_address)

socket.create_connection = set_src_addr

import requests
r = requests.get('http://www.google.com')

看起来httplib将所有参数 (to create_connection()) 作为 args (vs 关键字) 传递,因为尝试扩展kwargs内部的 dictset_src_addr失败了。我相信以上是您想要的,但是我没有要测试的双宿主机器。

于 2012-09-25T20:35:34.067 回答
0

实际上,您应该将 IP 绑定到这样的请求:

import urllib3
real_create_conn = urllib3.util.connection.create_connection

def set_src_addr(address, timeout, *args, **kw):
    source_address = ('YOUR_BIND_IP', 0)
    return real_create_conn(address, timeout=timeout, source_address=source_address)

urllib3.util.connection.create_connection = set_src_addr

import requests
r = requests.get('http://ipecho.net/plain')
print( r.text)
于 2022-01-19T15:02:12.717 回答