尽管发送了正确的授权详细信息,但仍得到未经授权的响应

时间:2019-04-05 06:10:31

标签: android twilio-api android-wireless

我正在使用Twilio Rest API使用android studio发送无线命令。 我已经根据他们的无线命令文档实现了代码结构。但是当我按下按钮以获取响应时,而不是获得期望的结果时,我得到的是未经授权的401响应。我是第一次使用他们的API,因此显然不知道我在做什么错。

这是我的代码:

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

此处SIMSID是twilio sim卡的唯一主题,我发送的命令是hello机器!         凭据凭据=新凭据(SIMSID,COM​​MAND);

    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 :(得分:0)

好的,我解决了。问题出在请求中,我没有按照要求发送。

通过添加拦截器解决了我的问题

 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);