簡體   English   中英

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

[英]How to provide proxy information to Twilio API with Python

看起來Twilio API已更新,它們不再能夠from twilio.rest.resources import Connection導入from twilio.rest.resources import Connection這意味着向您展示如何使用Connection類設置代理的文檔/答案不再起作用。

即:

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子類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())

如果這有幫助,請告訴我。

@ philnash的答案現已過時,但好消息是你可以使用更簡單的代碼來使用代理http-client:

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='...')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM