如何使用Python向Twilio API提供代理信息

如何使用Python向Twilio API提供代理信息

问题描述:

看起来Twilio API已更新,它们不再具有导入from twilio.rest.resources import Connection的能力,这意味着文档/答案显示如何使用Connection类设置代理不再工作。如何使用Python向Twilio API提供代理信息

即:

from twilio.rest.resources import Connection 
from twilio.rest.resources.connection import PROXY_TYPE_HTTP 

Connection.set_proxy_info(
    "proxy.server", 
    3128, 
    proxy_type=PROXY_TYPE_HTTP 
)` 

不行的,因为没有资源类从进口。

什么是使用Python 3和Twilio最新代码为Twilio Python库设置代理信息的正确方法?

有关于该记录在Github上的问题,但它并没有一个具体的解决方案还https://github.com/twilio/twilio-python/issues/327

Twilio开发商在这里传道。

由于GitHub上的问题说,我们已经从urllib2切换到Requests,但并没有像默认的TwilioHttpClient那样提供所有的选项,比如代理。该问题还表明,您将子类HttpClient自己添加到代理中。

据我所见,您可以复制现有的大部分TwilioHttpClient将代理添加到会话对象。像这样:

from requests import Request, Session 

from twilio.http import HttpClient, get_cert_file 
from twilio.http.response import Response 


class ProxiedTwilioHttpClient(HttpClient): 
    """ 
    General purpose HTTP Client for interacting with the Twilio API 
    """ 
    def request(self, method, url, params=None, data=None, headers=None, auth=None, timeout=None, 
       allow_redirects=False): 

     session = Session() 
     session.verify = get_cert_file() 
     session.proxies = { 
           "https" : "https://x.x.x.x:yy" 
          } 

     request = Request(method.upper(), url, params=params, data=data, headers=headers, auth=auth) 

     prepped_request = session.prepare_request(request) 
     response = session.send(
      prepped_request, 
      allow_redirects=allow_redirects, 
      timeout=timeout, 
     ) 

     return Response(int(response.status_code), response.content.decode('utf-8')) 

注意在request方法

然后中间调用session.proxies,当你实例化你Client,包括新ProxiedTwilioHttpClient

from twilio.rest import Client 
from proxied_twilio_http_client import ProxiedTwilioHttpClient 

client = Client(account_sid, auth_token, http_client=ProxiedTwilioHttpClient()) 

让我知道这是否有帮助。

+0

真棒,感谢分享这一解决方案,希望这样可以节省的人一段时间。我在执行代码时遇到了一些小问题 – RyanS

+0

NVM编辑队列已满......基本上,只需要添加一个来自请求导入会话,请求的导入并修复返回的缩进(格式问题我怀疑) – RyanS

+0

谢谢!随意编辑回到我的答案。如果它确实为您解决了问题,请将其标记为正确。 – philnash

@ philnash的回答是已经过时的,但好消息是,你可以得到一个代理HTTP客户端用简单的代码工作:

import os 
from twilio.rest import Client 
from twilio.http.http_client import TwilioHttpClient 

proxy_client = TwilioHttpClient() 

# assuming your proxy is available via the standard env var https_proxy: 
## (this is the case on pythonanywhere) 
proxy_client.session.proxies = {'https': os.environ['https_proxy']} 

# assumes you've set up your twilio creds as env vars as well 
# you can pass these in here alternatively 
client = Client(http_client=proxy_client) 

# twilio api calls will now work from behind the proxy: 
message = client.messages.create(to="...", from_='...', body='...')