соединение twilio java с аутентификацией прокси

Я устанавливаю соединение java Twilio, используя пример Twilio java-sdk из примеров api здесь.

Единственная разница в том, что мне нужно запустить подключение Twilio через веб-прокси с аутентификацией.

Есть и другие вопросы о подключении к Twilio через веб-прокси, но нет принятых ответов. Например, this на основе этого ответа Я пробовал реализовать такое решение:

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<NameValuePair> params = new ArrayList<NameValuePair>();
        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();
        }

    }

}

Кажется, он проходит через прокси с этим и достигает API Twilio, но он возвращает 20003 ошибка каждый раз. (доступ запрещен)

Я подозреваю, что проверка подлинности веб-прокси http-client перезаписывает SID учетной записи twilio и токен аутентификации, но я не уверен, или есть способ обойти это.

Я трижды проверил SID своей учетной записи и токен аутентификации, а также попытался использовать «тестовый» SID и токен аутентификации, которые Twilio также предоставляет для учетной записи, но я получил тот же результат.

Есть какие-нибудь советы по запуску Twilio java-sdk через веб-прокси?

Я использую http-клиентскую библиотеку apache 4.5.2


person egerardus    schedule 07.09.2016    source источник


Ответы (1)


Решено ... просто нужно было добавить еще один набор учетных данных, которые были ограничены до 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));

Я оставлю это здесь для потомков, потому что по этому поводу было несколько вопросов, но нет общепринятых ответов.

person egerardus    schedule 07.09.2016