twilio / twilio-python

A Python module for communicating with the Twilio API and generating TwiML.
MIT License
1.83k stars 699 forks source link

class AsyncTwilioHttpClient takes "proxy_url" parameter, but does not use it for anything. #788

Open skyler-guha opened 4 months ago

skyler-guha commented 4 months ago

Issue Summary

I work behind a firewall and use a proxy to make requests. I wanted to send messages asynchronously using twilio and followed the steps here in the documentation to make asynchronous message sending requests. I used the "proxy_url" parameter of the AsyncTwilioHttpClient class to specify my proxy url string in the form "http://xxx.xxx.xxx.xxx:xxxx". It did not work and i got an error saying "cannot connect to host api.twilio.com 443".

My first assumptions were that maybe the proxy url string format I had used was wrong, or maybe it is a proxy/firewall issue on our end. I was able to send synchronous messages just fine using the proxy, so that was not the issue. Then I looked at the code for AsyncTwilioHttpClient and found that while it is taking the proxy string, It is not actually doing anything with it. You may confirm the same here at the github page for the code.

Am I doing something wrong here? Am I missing something? Am I supposed to use a different way to specify the proxy to use for AsyncTwilioHttpClient?

Code Snippet for asynchronous messaging (gives error):

from twilio.http.async_http_client import AsyncTwilioHttpClient
from twilio.rest import Client

async def main():
    account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    auth_token  = "your_auth_token"
    http_client = AsyncTwilioHttpClient(proxy_url= "http://xxx.xxx.xxx.xxx:xxxx")
    client = Client(account_sid, auth_token, http_client=http_client)

    message = await client.messages.create_async(to="+1xxxxxxxxxx", from_="+1xxxxxxxxxx",
                                                 body="Hello there!")

    print(message.sid)

asyncio.run(main())

Code Snippet for synchronous messaging (does not give error):

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

def main():
    account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    auth_token  = "your_auth_token"
    http_client = TwilioHttpClient(proxy= {"http" : "http://xxx.xxx.xxx.xxx:xxxx"})
    client = Client(account_sid, auth_token, http_client=http_client)

    message = client.messages.create(to="+1xxxxxxxxxx", from_="+1xxxxxxxxxx",
                                                 body="Hello there!")
    print(message.sid)

main()

Exception/Log

twilio_error

Technical details:

tiwarishubham635 commented 3 months ago

I can take a look