[英]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.