Android POST请求从AWS API网关返回403

Android POST请求从AWS API网关返回403,android,amazon-web-services,post,aws-lambda,aws-api-gateway,Android,Amazon Web Services,Post,Aws Lambda,Aws Api Gateway,我正在使用AWS Lambda w/API网关触发器,我遇到了一个问题 我正在使用改装来发出POST请求,我得到了403的回复。我正在传递一个带有URL的JSON,amazon服务将在其中使用它。有什么我需要放在标题里的吗?我从请求中删除了授权 这是原始信息,它没有给我一个详细的信息 响应{protocol=h2,code=403,message=,url=} 接口/改装服务 public interface AmazonService { @Headers("Content-Type:

我正在使用AWS Lambda w/API网关触发器,我遇到了一个问题

我正在使用改装来发出POST请求,我得到了403的回复。我正在传递一个带有URL的JSON,amazon服务将在其中使用它。有什么我需要放在标题里的吗?我从请求中删除了授权

这是原始信息,它没有给我一个详细的信息

响应{protocol=h2,code=403,message=,url=}

接口/改装服务

public interface AmazonService {
    @Headers("Content-Type: application/json; charset=utf8")
    @POST("/lio")
    Observable<ResponseBody> getAmazonResponse(@Body JSONObject input);
}
公共接口AmazonService{
@标题(“内容类型:application/json;charset=utf8”)
@职位(“/lio”)
可观察的getAmazonResponse(@Body JSONObject输入);
}

amazonReformation=new reformation.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.回拨执行人(执行人)
.客户(okHttpClient)
.baseUrl(“https://eun533ayha.execute-api.us-west-1.amazonaws.com/Prod/")
.build();
AmazonService as=amazonReformation.create(AmazonService.class);
JSONObject JSONObject=新的JSONObject();
试一试{
jsonObject.put(“url”,“www.google.com”);
}捕获(JSONException e){
e、 printStackTrace();
}
可观测obs=as.getAmazonResponse(jsonObject);
obs.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
未完成的公共无效(){
Log.d(标记“response onCompleted()”);
}
@凌驾
公共作废登记员(可丢弃){
Log.d(标记“response onError()”);
}
@凌驾
public void onNext(响应主体响应){
Log.d(标记“response onNext()”);
}
});

我认为您使用的是改装2,改装2使用的规则与

如果你在你的路径上有一个领先的'/',它将被认为是绝对路径。

public interface AmazonService {
    @Headers("Content-Type: application/json; charset=utf8")
    @POST("/lio")
    Observable<ResponseBody> getAmazonResponse();
}

amazonRetrofit = new Retrofit.Builder()
        .client(okHttpClient)
        .baseUrl("https://eun533ayha.execute-api.us-west-1.amazonaws.com/Prod/")
        .build();
公共接口AmazonService{
@标题(“内容类型:application/json;charset=utf8”)
@职位(“/lio”)
可观察的getAmazonResponse();
}
AmazonReformation=new reformation.Builder()
.客户(okHttpClient)
.baseUrl(“https://eun533ayha.execute-api.us-west-1.amazonaws.com/Prod/")
.build();
结果:

如果删除路径上的“领先”/“”,它将被视为相关路径。

public interface AmazonService {
    @Headers("Content-Type: application/json; charset=utf8")
    @POST("lio")
    Observable<ResponseBody> getAmazonResponse();
}

amazonRetrofit = new Retrofit.Builder()
        .client(okHttpClient)
        .baseUrl("https://eun533ayha.execute-api.us-west-1.amazonaws.com/Prod/")
        .build();
公共接口AmazonService{
@标题(“内容类型:application/json;charset=utf8”)
@职位(“lio”)
可观察的getAmazonResponse();
}
AmazonReformation=new reformation.Builder()
.客户(okHttpClient)
.baseUrl(“https://eun533ayha.execute-api.us-west-1.amazonaws.com/Prod/")
.build();
结果:


在您的情况下,看起来您有一个stage“Prod”,并且您的集成在资源“/lio”上。我认为如果您删除前导的“/”,它会起作用。

我认为您使用的是改型2,改型2使用的规则与

如果你在你的路径上有一个领先的'/',它将被认为是绝对路径。

public interface AmazonService {
    @Headers("Content-Type: application/json; charset=utf8")
    @POST("/lio")
    Observable<ResponseBody> getAmazonResponse();
}

amazonRetrofit = new Retrofit.Builder()
        .client(okHttpClient)
        .baseUrl("https://eun533ayha.execute-api.us-west-1.amazonaws.com/Prod/")
        .build();
公共接口AmazonService{
@标题(“内容类型:application/json;charset=utf8”)
@职位(“/lio”)
可观察的getAmazonResponse();
}
AmazonReformation=new reformation.Builder()
.客户(okHttpClient)
.baseUrl(“https://eun533ayha.execute-api.us-west-1.amazonaws.com/Prod/")
.build();
结果:

如果删除路径上的“领先”/“”,它将被视为相关路径。

public interface AmazonService {
    @Headers("Content-Type: application/json; charset=utf8")
    @POST("lio")
    Observable<ResponseBody> getAmazonResponse();
}

amazonRetrofit = new Retrofit.Builder()
        .client(okHttpClient)
        .baseUrl("https://eun533ayha.execute-api.us-west-1.amazonaws.com/Prod/")
        .build();
公共接口AmazonService{
@标题(“内容类型:application/json;charset=utf8”)
@职位(“lio”)
可观察的getAmazonResponse();
}
AmazonReformation=new reformation.Builder()
.客户(okHttpClient)
.baseUrl(“https://eun533ayha.execute-api.us-west-1.amazonaws.com/Prod/")
.build();
结果:


在您的情况下,看起来您有一个stage“Prod”,并且您的集成在资源“/lio”上。我认为如果删除前导的“/”,它会起作用。

您还可以发布如何使用改型来发出请求和API配置吗?更新了问题您是否在方法上启用了任何身份验证,如AWS身份验证、Cognito用户池、,自定义身份验证?身份验证:在我的POST请求中无身份验证?您还可以发布您如何使用改装来发出请求和API配置吗?更新了问题您是否在方法中启用了任何身份验证,如AWS身份验证、Cognito用户池、自定义身份验证?身份验证:在我的POST请求中无身份验证有效!现在,Lambda函数无法识别我传递到主体中的JSON。我修改了上面的代码来传递JSON。对JSON有什么建议吗?你可以创建自己的模型来匹配你的身体模式<代码>公共接口AmazonService{@Headers(“内容类型:application/json;charset=utf8”)@POST(“lio”)可观察的getAmazonResponse(@Body apirect Body);}而不是传递json我在HashMap中传递了json,它成功了。它成功了!现在,Lambda函数无法识别我传递到主体中的JSON。我修改了上面的代码来传递JSON。对JSON有什么建议吗?你可以创建自己的模型来匹配你的身体模式<代码>公共接口AmazonService{@Headers(“内容类型:application/json;charset=utf8”)@POST(“lio”)可观察的getAmazonResponse(@Body apirect Body);}而不是传递json,我在HashMap中传递了json,它成功了。