2017-01-07 2 views
1

Я пытаюсь создать страницу входа, и я использую 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 отлично.

request in hurl

response in hurl

Это журнал древесины.

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) 
+0

Я использовал okhttp для отправки запроса, и это сработало. Может ли кто-нибудь выяснить проблему? – Jay

ответ

0

Я нашел ошибку в своей программе. На самом деле это была проблема моего Url, предоставленного классу Restprovider. Предполагалось, что это «/api-token-auth/» просто косая черта сделала все различие. Спасибо всем тем, кто пытался.

Смежные вопросы