【发布时间】:2017-09-27 21:53:13
【问题描述】:
我正在使用带有 API 网关触发器的 AWS Lambda,但遇到了问题。
我正在使用 RetroFit 发出 POST 请求,但我收到了 403 的回复。我正在传递一个带有 URL 的 JSON,亚马逊服务将对其进行处理。有什么我需要放在标题中的吗?我从请求中删除了授权。
这是原始消息,它没有给我详细的消息。
“响应{protocol=h2, code=403, message=, url=https://eun533ayha.execute-api.us-west-1.amazonaws.com/lio}”
接口/改造服务
public interface AmazonService {
@Headers("Content-Type: application/json; charset=utf8")
@POST("/lio")
Observable<ResponseBody> getAmazonResponse(@Body JSONObject input);
}
amazonRetrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.callbackExecutor(executor)
.client(okHttpClient)
.baseUrl("https://eun533ayha.execute-api.us-west-1.amazonaws.com/Prod/")
.build();
AmazonService as = amazonRetrofit.create(AmazonService.class);
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("url", "www.google.com");
} catch (JSONException e) {
e.printStackTrace();
}
Observable<ResponseBody> obs = as.getAmazonResponse(jsonObject);
obs.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ResponseBody>() {
@Override
public void onCompleted() {
Log.d(TAG, "response onCompleted()");
}
@Override
public void onError(Throwable throwable) {
Log.d(TAG, "response onError()");
}
@Override
public void onNext(ResponseBody response) {
Log.d(TAG, "response onNext()");
}
});
【问题讨论】:
-
您能否发布一下您如何使用 RetroFit 发出请求以及您的 API 配置?
-
更新问题
-
您是否在您的方法上启用了任何身份验证,例如 AWS 身份验证、Cognito 用户池、自定义身份验证?
-
Auth: NONE 在我的 POST 请求中
标签: android amazon-web-services post aws-lambda aws-api-gateway