Я пытаюсь создать страницу входа, и я использую django как backend. Используемая аутентификация основана на токенах. Я попытался POST имя пользователя и пароль, который дает мне ошибку 405 http-кода, которая не соответствует ожидаемому. а также он говорит, что он не ожидает метода GET, который я делаю. он работает правильно в https://www.hurl.it/. i разместил изображения и код здесь. Пожалуйста помоги !Retrofit-http 405 ответ?
LoginPresenter.java
subscription = RxUtil.io(restProvider.authenticate(userId, password))
.subscribe(new Subscriber<JsonObject>() {
@Override
public void onCompleted() {
getMvpView().showProgress(false);
}
@Override
public void onError(Throwable e) {
Timber.e(e);
getMvpView().showProgress(false);
}
@Override
public void onNext(JsonObject jsonObject) {
Timber.d(jsonObject.toString());
}
});
RestProvider.java
public interface RestProvider {
@FormUrlEncoded
@POST("/api-token-auth")
Observable<JsonObject> authenticate(@Field("username") String user, @Field("password") String pass);
}
Журнал перехватчик
POST http://mylink.com/mypath http/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 52
username=myusername&password=mypassword
--> END POST (52-byte body)
<-- 405 Method Not Allowed http://mylink.com/mypath (84ms)
Date: Sat, 07 Jan 2017 04:36:48 GMT
Server: Apache/2.4.18 (Ubuntu)
Vary: Cookie
X-Frame-Options: SAMEORIGIN
Allow: POST, OPTIONS
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
{"detail":"Method \"GET\" not allowed."}
<-- END HTTP (40-byte body)
Бэкэнд является Django, и я с помощью проверки подлинности на основе маркеров. Он работает в hurl.it отлично.
Это журнал древесины.
retrofit2.adapter.rxjava.HttpException: HTTP 405 Method Not Allowed
at retrofit2.adapter.rxjava.OperatorMapResponseToBodyOrError$1.onNext(OperatorMapResponseToBodyOrError.java:43)
at retrofit2.adapter.rxjava.OperatorMapResponseToBodyOrError$1.onNext(OperatorMapResponseToBodyOrError.java:38)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$RequestArbiter.request(RxJavaCallAdapterFactory.java:173)
at rx.internal.operators.OperatorSubscribeOn$1$1$1.request(OperatorSubscribeOn.java:80)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OperatorSubscribeOn$1$1.setProducer(OperatorSubscribeOn.java:76)
at rx.Subscriber.setProducer(Subscriber.java:205)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:152)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:138)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10142)
at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)
at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.call(CachedThreadScheduler.java:230)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Я использовал okhttp для отправки запроса, и это сработало. Может ли кто-нибудь выяснить проблему? – Jay