twilio java连接与代理身份validation

我正在使用这里的api示例中的示例Twilio java-sdk建立java Twilio连接。

唯一的区别是我需要通过带有身份validation的Web代理来运行我的Twilio连接。

关于通过网络代理连接到Twilio还有其他问题,但没有接受的答案。 例如,基于该答案我尝试实现这样的解决方案:

import com.twilio.sdk.TwilioRestClient; import com.twilio.sdk.TwilioRestException; import com.twilio.sdk.resource.factory.MessageFactory; import com.twilio.sdk.resource.instance.Message; import org.apache.http.HttpHost; import org.apache.http.NameValuePair; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.DefaultProxyRoutePlanner; import org.apache.http.message.BasicNameValuePair; import java.util.ArrayList; import java.util.List; public class Example { // Find your Account Sid and Token at twilio.com/console public static final String ACCOUNT_SID = "asdfasdfasdfdasf"; public static final String AUTH_TOKEN = "asdfasdfasdfasdf"; public static final String PROXY_ADDRESS = "1.2.3.4"; public static final int PROXY_PORT = 80; public static final String PROXY_USER = "user"; public static final String PROXY_PASSWORD = "password"; public static void main(String[] args) { //Set up Proxy host HttpHost proxy = new HttpHost(PROXY_ADDRESS, PROXY_PORT); DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy); //Set up Proxy user credentials CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope(PROXY_ADDRESS, PROXY_PORT), new UsernamePasswordCredentials(PROXY_USER, PROXY_PASSWORD)); //Set up HttpClient with proxy and credentials CloseableHttpClient httpClient = HttpClients.custom() .setRoutePlanner(routePlanner) .setDefaultCredentialsProvider(credsProvider) .build(); TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN); client.setHttpClient(httpClient); // Build a filter for the MessageList List params = new ArrayList(); params.add(new BasicNameValuePair("Body", "Hello from Java")); params.add(new BasicNameValuePair("To", "+12345678901")); params.add(new BasicNameValuePair("From", "+12345678901")); MessageFactory messageFactory = client.getAccount().getMessageFactory(); try { Message message; message = messageFactory.create(params); System.out.println(message.getSid()); } catch (TwilioRestException e) { System.out.println(e.getErrorCode()); System.out.println(e.getErrorMessage()); e.printStackTrace(); } } } 

它似乎通过代理使用它并到达Twilio API,但每次都返回20003错误 。 (没有权限)

我怀疑http客户端Web代理身份validation覆盖了twilio帐户SID和身份validation令牌,但我不确定,或者是否有办法解决这个问题。

我已经检查了我自己的帐户SID和身份validation令牌,并尝试使用Twilio为帐户提供的“测试”SID和身份validation令牌,但我得到了相同的结果。

有关通过Web代理运行Twilio java-sdk的任何建议吗?

我正在使用apache http-client library 4.5.2

已解决…只需在代理凭据之后添加另一组作用域为api.twilio.com的凭据:

  //Set up Proxy user credentials CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope(PROXY_ADDRESS, PROXY_PORT), new UsernamePasswordCredentials(PROXY_USER, PROXY_PASSWORD)); //Set up Twilio user credentials credsProvider.setCredentials( new AuthScope("api.twilio.com", 443), new UsernamePasswordCredentials(ACCOUNT_SID, AUTH_TOKEN)); 

我将这里留给后人,因为有几个问题,但没有接受的答案。