Получение несанкционированного ответа несмотря на отправку правильных данных авторизации - PullRequest
0 голосов
/ 05 апреля 2019

Я использую Twilio Rest API для отправки беспроводных команд с помощью Android Studio.Я реализовал структуру кода в соответствии с их документацией для беспроводных команд.но когда я нажимаю кнопку, чтобы получить ответ, вместо того, чтобы получить желаемый результат, я получаю несанкционированный ответ 401.Я использую их API в первый раз, так что явно не представляю, что я делаю не так здесь.

Вот мой код для этого:

  public void byApi() {
    Retrofit retrofit = new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl(ApiRetro.BASE_URL)
            .build();

здесьSIMSID является уникальным anme для сим-карты twilio, и отправляемая мною команда - привет! Учетные данные для учетных данных = новые учетные данные (SIMSID, COMMAND);

    ApiRetro apiRetro = retrofit.create(ApiRetro.class);
    Call<ResponseBody> call = apiRetro.getSid(credentials);
    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            if(response.isSuccessful())
            {
                try {
                    String hyyy=response.body().string();
                    try {
                        JSONObject jsonObject=new JSONObject(hyyy);

                        String test=jsonObject.getString("status");
                        Log.v("sdfg",test);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }


                try {
                    Log.v("TAG",response.body().string());
                    Toast.makeText(getApplicationContext(),response.body().string(),Toast.LENGTH_LONG).show();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            else
            {
                Toast.makeText(getApplicationContext(),response.code()+" "+response.message(),Toast.LENGTH_LONG).show();
                Log.v("one", String.valueOf(response.errorBody()));
                Log.v("two",response.message());
                Log.v("three", String.valueOf(response.code()));
                Log.v("four", String.valueOf(response.headers()));
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            t.getStackTrace();
        }
    });

}

Интерфейс для запроса на модификацию выглядиткак это:

 String BASE_URL = "https://wireless.twilio.com/v1/";


@Headers({"AccountSid:yyyyyyyyyyyyyyyyyxxxx",
        "AuthToken: yyyyyyyyyyyyyyyyyyyyxxx",
        "token: ",
"Content-Type: application/x-www-form-urlencoded"})
@POST("Commands")
Call<ResponseBody> getSid(@Body Credentials credentials);

Класс кузова:

public class Credentials {
 String Sim;

 String Command;

public Credentials(String sim, String command) {
    Sim = sim;
    Command = command;
}

public String getSim() {
    return Sim;
}

public void setSim(String sim) {
    Sim = sim;
}

public String getCommand() {
    return Command;
}

public void setCommand(String command) {
    Command = command;
}

}

1 Ответ

0 голосов
/ 05 апреля 2019

ОК, я решил. Проблема была в запросе, который я не отправлял в соответствии с требованиями.

, добавив перехватчик, решил мою проблему

 OkHttpClient client = new OkHttpClient.Builder()
            .addInterceptor(new BasicInterceptor(SID,AUTH))
            .build();

, а затем просто

 Retrofit retrofit = new Retrofit.Builder()
        .addConverterFactory(GsonConverterFactory.create())
        .client(client)
        .baseUrl(ApiRetro.BASE_URL)
        .build();

и удалил заголовки из интерфейса, как

@POST("Commands")
@FormUrlEncoded
Call<ResponseBody> getSid(@Field("Sim") String sim,@Field("Command") String command);
...