error 501 while calling api with retrofit android - android

I have searched various SO threads for the same but no results. anyways, I am having trouble calling simple rest api with retrofit. It is a patch api and when I call it from swagger it works fine and response is sent. but when I call from android it doesn't work. I have another similar api request but it works fine with android code as well. please check below details and guide me where I am going wrong.
API Call in Swagger
Request url : http://138.197.110.214:3100/register/resendVerificationCode
Parameters :
{
"email": "ab#gmail.com",
"requestForNewPassword": true,
"sendMail": true
}
Response
{
"connection": "keep-alive",
"date": "Wed, 07 Feb 2018 21:35:48 GMT",
"transfer-encoding": "chunked",
"cache-control": "no-cache",
"content-encoding": "gzip",
"content-type": "application/json; charset=utf-8",
"vary": "accept-encoding"
}
Below is the details for android call
Declaration in interface
#FormUrlEncoded
#PATCH("/register/resendVerificationCode")
public Observable<ResendOTPResponse> doResendForgetOTP(#Field("email") String email, #Field(WebServicesTags.TAG_STR_requestForNewPassword) boolean request, #Field("sendMail") boolean emailbool);
Method call in class
Observable<ResendOTPResponse> register = apiservice.doResendForgetOTP(edtUsername.getText().toString(), true, true); register.subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .onErrorResumeNext(throwable -> {
Toast.makeText(mContext, "" + mContext.getResources().getString(R.string.msg_networkerror), Toast.LENGTH_SHORT).show();
return Observable.empty();
})
.subscribe(new Observer<ResendOTPResponse>() {
#Override
public void onCompleted() {
pdi.dismiss();
}
#Override
public void onError(Throwable e) {
((HttpException) e).code();
}
#Override
public void onNext(ResendOTPResponse resendOTPResponse) {
otpRestricter.setCounter(otpRestricter.getCounter() + 1);
showOTPDialog(mContext, 1);
}
});
Logcat output
D/OkHttp: --> PATCH http://138.197.110.214:3100/register/resendVerificationCode HTTP/1.1
D/OkHttp: Content-Type: application/x-www-form-urlencoded
D/OkHttp: Content-Length: 63
D/OkHttp: email=ahah%40xjxjx.com&requestForNewPassword=true&sendMail=true
D/OkHttp: --> END PATCH (63-byte body)
.
.
.
D/OkHttp: <-- 501 Not Implemented http://138.197.110.214:3100/register/resendVerificationCode (903ms)
D/OkHttp: Content-Type: text/vnd.wap.wml
D/OkHttp: Proxy-Connection: close
D/OkHttp: Connection: close
D/OkHttp: Content-Length: 200
D/OkHttp: OkHttp-Sent-Millis: 1518040494521
D/OkHttp: OkHttp-Received-Millis: 1518040495105
D/OkHttp: <?xml version="1.0"?>
D/OkHttp: <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
D/OkHttp: "http://www.wapforum.org/DTD/wml_1.1.xml">
D/OkHttp: <wml><card id = "error" title = "Error 400">
D/OkHttp: <p>
D/OkHttp: Bad Request
D/OkHttp: </p>
D/OkHttp: </card></wml>
D/OkHttp: <-- END HTTP (200-byte body)

Related

Unable to send parameters using Retrofit2 #GET and #Path

I want to send a get request with an ID param through to my asp.net rest api using the below code. The format I'm trying to achieve is https://randomwebapi.net/api/Tblathletes/id but instead the end result it always ends up being https://randomWebApi.net/api/Tblathletes/ which returns all athletes. It always omits the ID at the end. Is there another way I can achieve this format?
#GET("TblAthletes/{id}")
fun getAthlete(#Path("id")id:String?): Call<List<tblAthlete>>
Below is the code for making the call
private fun getAthletesdata(athleteID: String?) {
// val filter = HashMap<String?,String?>()
// filter.put("Id",athleteID)
val call = mAPIService?.getAthlete(athleteID)
call?.enqueue(object : Callback<List<tblAthlete>> {
override fun onResponse(call: Call<List<tblAthlete>>, response: Response<List<tblAthlete>>) {
val athletes:List<tblAthlete> = response.body()!!
txtName?.setText((athletes[0].name))
txtSurname?.setText((athletes[0].surname))
txtDOB?.setText((athletes[0].dob))
txtAthleteNumber?.setText((athletes[0].athletenumber))
txtID?.setText((athletes[0].athleteidno))
}
override fun onFailure(call: Call<List<tblAthlete>>, t: Throwable) {
Toast.makeText(this#EditAthleteActivity.context, t.message, Toast.LENGTH_SHORT).show()
}
})
}
Below is my asp.net code
[HttpGet]
public async Task<ActionResult<IEnumerable<Tblathletegroup>>> GetTblathletegroup()
{
return await _context.Tblathletegroup.ToListAsync();
}
// GET: api/Tblathletegroups/5
[HttpGet("{id}")]
public async Task<ActionResult<Tblathletegroup>> GetTblathletegroup(string id)
{
var tblathletegroup = await _context.Tblathletegroup.FindAsync(id);
if (tblathletegroup == null)
{
return NotFound();
}
return tblathletegroup;
}
Below is The OKHttp Logs
2020-06-25 22:30:25.358 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: --> GET https://RandomWebApi.net/api/TblAthletes/82ce9446-2776-41bd-bde8-3df6f924930a
2020-06-25 22:30:25.358 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: --> END GET
2020-06-25 22:30:25.383 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: --> GET https://RandomWebApi.net/api/TblAthletes/
2020-06-25 22:30:25.383 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: --> END GET
2020-06-25 22:30:26.033 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: <-- 200 OK https://RandomWebApi.net/api/TblAthletes/82ce9446-2776-41bd-bde8-3df6f924930a (674ms)
2020-06-25 22:30:26.033 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: Content-Type: application/json; charset=utf-8
2020-06-25 22:30:26.033 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: Vary: Accept-Encoding
2020-06-25 22:30:26.033 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: Server: Microsoft-IIS/10.0
2020-06-25 22:30:26.034 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: Request-Context: appId=cid-v1:037be9f0-7309-4880-8975-6ae211302d2b
2020-06-25 22:30:26.034 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: X-Powered-By: ASP.NET
2020-06-25 22:30:26.034 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: Set-Cookie: ARRAffinity=7b498185396ab6e22ba34a59367270862958d11522d339239b2c110274a21354;Path=/;HttpOnly;Domain=RandomWebApi.net
2020-06-25 22:30:26.034 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: Date: Thu, 25 Jun 2020 14:30:25 GMT
2020-06-25 22:30:26.039 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: {"id":"82ce9446-2776-41bd-bde8-3df6f924930a","name":"Ronnie","surname":"Colman","dob":"1962","isDeleted":null,"modifiedUserId":null,"createdUserId":null,"createdDateTime":"2020-06-25T07:55:21","modifiedDateTime":null,"athleteNumber":"464664","athleteIdno":"643464","coachId":"Bob"}
2020-06-25 22:30:26.039 13749-13811/com.sprint_coach.shaun.sprint_coach D/OkHttp: <-- END HTTP (281-byte body)
2020-06-25 22:30:28.689 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: <-- 200 OK https://RandomWebApi.net/api/TblAthletes/ (3305ms)
2020-06-25 22:30:28.689 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: Content-Type: application/json; charset=utf-8
2020-06-25 22:30:28.689 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: Vary: Accept-Encoding
2020-06-25 22:30:28.689 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: Server: Microsoft-IIS/10.0
2020-06-25 22:30:28.689 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: Request-Context: appId=cid-v1:037be9f0-7309-4880-8975-6ae211302d2b
2020-06-25 22:30:28.690 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: X-Powered-By: ASP.NET
2020-06-25 22:30:28.690 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: Set-Cookie: ARRAffinity=7b498185396ab6e22ba34a59367270862958d11522d339239b2c110274a21354;Path=/;HttpOnly;Domain=RandomWebApi.net
2020-06-25 22:30:28.690 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: Date: Thu, 25 Jun 2020 14:30:27 GMT
2020-06-25 22:30:28.698 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: [{"id":"0f812b28-7285-11ea-b9a2-b42e9918ef25","name":"Shaun","surname":"Johnson","dob":"1992","isDeleted":null,"modifiedUserId":null,"createdUserId":null,"createdDateTime":"2020-03-30T20:50:40","modifiedDateTime":null,"athleteNumber":"6464","athleteIdno":"646464","coachId":"Bob"},{"id":"82ce9446-2776-41bd-bde8-3df6f924930a","name":"Ronnie","surname":"Colman","dob":"1962","isDeleted":null,"modifiedUserId":null,"createdUserId":null,"createdDateTime":"2020-06-25T07:55:21","modifiedDateTime":null,"athleteNumber":"464664","athleteIdno":"643464","coachId":"Bob"},{"id":"97171a8d-e2ca-454e-ad1e-491156c53cfc","name":"Bill","surname":"Burns","dob":"1985","isDeleted":null,"modifiedUserId":null,"createdUserId":null,"createdDateTime":"2020-06-25T10:09:41","modifiedDateTime":null,"athleteNumber":"222","athleteIdno":null,"coachId":"Bob"}]
2020-06-25 22:30:28.698 13749-13822/com.sprint_coach.shaun.sprint_coach D/OkHttp: <-- END HTTP (835-byte body)
Changed the object type from Call<List> to Call. Because I was only returning one row the the Java script being returned was not correct. Now it is working.

Adding OkHttpClient interceptor makes the request proceed multiple times

I was trying to add refresh token interceptor to http client
public class AuthInterceptor implements Interceptor {
private Disposable disposable;
#Override
public Response intercept(#NonNull Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
// if (response.code() == HttpURLConnection.HTTP_UNAUTHORIZED) {
//
// synchronized (chain) {
//
//
// RefreshTokenApi refreshTokenApi = new RefreshTokenApi();
// disposable = refreshTokenApi.call().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(
// (tokenResponse, throwable) -> {
//
// PreferencesWrapperImpl.SINGLETON.putStringForKey(tokenResponse.getResponse().header(Constants.AUTH_TOKEN), Constants.PreferenceKey.AUTH_TOKEN_KEY);
// Log.e("throwable", throwable.getMessage());
//
// });
//
//
// Request newRequest = request.newBuilder()
// .removeHeader(Constants.AUTH_TOKEN)
// .addHeader(Constants.AUTH_TOKEN, PreferencesWrapperImpl.SINGLETON.getStringForKey(Constants.PreferenceKey.AUTH_TOKEN_KEY, null))
// .build();
// response = chain.proceed(newRequest);
// }
// }
return response;
}
}
then i discovered that the request proceed many times so i thought that maybe my synchronized logic wrong and that is what caused request to occur multiple time so i commented the synchronized logic but actually the request still occur many times
and here is my logcat
D/OkHttp: --> POST http://134.209.26.2:88/api/common/version/check http/1.1
D/OkHttp:
--> POST http://134.209.26.2:88/api/common/version/check http/1.1
Content-Type: application/json; charset=utf-8
Content-Length: 35
D/OkHttp: Content-Type: application/json; charset=utf-8
Content-Length: 35
D/OkHttp: Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC8xMzQuMjA5LjI2LjI6ODhcL2FwaVwvc3BcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNTg3NjQxMjY5LCJleHAiOjE1ODc2NzcyNjksIm5iZiI6MTU4NzY0MTI2OSwianRpIjoiZThXQUpIenVSamdGOGpORyIsInN1YiI6MTMsInBydiI6Ijg3ZTBhZjFlZjlmZDE1ODEyZmRlYzk3MTUzYTE0ZTBiMDQ3NTQ2YWEiLCJwaWQiOjUsInR5cGUiOjF9.sA3-Ga9YI-4AyDZV_KIuOukONu3Abblq6ge8JbaMgp8
x-lang-code: en-us
D/OkHttp: Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC8xMzQuMjA5LjI2LjI6ODhcL2FwaVwvc3BcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNTg3NjQxMjY5LCJleHAiOjE1ODc2NzcyNjksIm5iZiI6MTU4NzY0MTI2OSwianRpIjoiZThXQUpIenVSamdGOGpORyIsInN1YiI6MTMsInBydiI6Ijg3ZTBhZjFlZjlmZDE1ODEyZmRlYzk3MTUzYTE0ZTBiMDQ3NTQ2YWEiLCJwaWQiOjUsInR5cGUiOjF9.sA3-Ga9YI-4AyDZV_KIuOukONu3Abblq6ge8JbaMgp8
D/OkHttp: x-user-type: 1
D/OkHttp: x-lang-code: en-us
x-user-type: 1
D/OkHttp: {"user_platform":1,"version":"1.0"}
--> END POST (35-byte body)
D/OkHttp: {"user_platform":1,"version":"1.0"}
--> END POST (35-byte body)
D/OkHttp: <-- 200 OK http://134.209.26.2:88/api/common/version/check (446ms)
D/OkHttp: Date: Sat, 25 Apr 2020 22:01:29 GMT
Server: Apache/2.4.29 (Unix) OpenSSL/1.0.2n PHP/7.2.1 mod_perl/2.0.8-dev Perl/v5.16.3
D/OkHttp: <-- 200 OK http://134.209.26.2:88/api/common/version/check (447ms)
D/OkHttp: Vary: Authorization
D/OkHttp: Date: Sat, 25 Apr 2020 22:01:29 GMT
D/OkHttp: X-Powered-By: PHP/7.2.1
D/OkHttp: Server: Apache/2.4.29 (Unix) OpenSSL/1.0.2n PHP/7.2.1 mod_perl/2.0.8-dev Perl/v5.16.3
D/OkHttp: Cache-Control: no-cache, private
D/OkHttp: Vary: Authorization
D/OkHttp: Content-Length: 46
D/OkHttp: X-Powered-By: PHP/7.2.1
D/OkHttp: Keep-Alive: timeout=5, max=100
D/OkHttp: Cache-Control: no-cache, private
D/OkHttp: Connection: Keep-Alive
D/OkHttp: Content-Length: 46
D/OkHttp: Content-Type: application/json
D/OkHttp: Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json
{"data":{"status":1,"min":null,"latest":null}}
D/OkHttp: {"data":{"status":1,"min":null,"latest":null}}
<-- END HTTP (46-byte body)
D/OkHttp: <-- END HTTP (46-byte body)
E/APP_UPDATES: onSuccess
i use logging interceptor to so as you see the first request of app which is app updates post many times

Android: get cookie from header in retrofit

I am creating new sample app with dagger, Rx, MVP and retrofit2. I am new in retrofit .For loginActivity i have send parameters as json string to web service.If the user exist and has permission, service return true in body and in header send Cookie:
D/Payesh: --> POST http://test.com/Authentication.svc/json/Login
D/Payesh: Content-Type: application/json; charset=utf-8
D/Payesh: Content-Length: 183
D/Payesh: {"username":"****","password":"***","customCredential":"****","isPersistent":false}
D/Payesh: --> END POST (183-byte body)
/data/data/com.groot.payesh/cache/okhttp_cache/journal.tmp
D/Payesh: <-- 200 OK http://test.com/Authentication.svc/json/Login (2111ms)
D/Payesh: Cache-Control: private
D/Payesh: Content-Type: application/json; charset=utf-8
D/Payesh: Server: Microsoft-IIS/8.5
D/Payesh: Set-Cookie: ASP.NET_SessionId=3pi1nyrozbjwagw543Wsck4; path=/
D/Payesh: Set-Cookie: .ASPXAUTH=EA9127C4A3002F1D5EA5AADC279....; expires=Tue, 27-Mar-2018 15:17:22 GMT; path=/
D/Payesh: X-Frame-Options: SAMEORIGION
D/Payesh: Access-Control-Allow-Origin: test.com
D/Payesh: Access-Control-Allow-Headers: Content-Type, Accept
D/Payesh: Access-Control-Allow-Methods: GET, POST
D/Payesh: Access-Control-Max-Age: 1728000
D/Payesh: Access-Control-Allow-Credentials: true
D/Payesh: Date: Mon, 26 Mar 2018 15:17:22 GMT
D/Payesh: Content-Length: 4
D/Payesh: true
D/Payesh: <-- END HTTP (4-byte body)
this is my ApiService:
#POST(UrlManager.AUTHENTICATION+"Login")
Observable<String> getAuthentication(#Body RequestBody params);
this method return a string and i received True when i run my app an get user and pass.
this is my observer method:
public DisposableObserver<String> observer() {
return new DisposableObserver<String>() {
#Override
public void onNext(String responseBody) {
Log.i("--->", "onNext: " + responseBody);
}...
I need this line in header:
Set-Cookie: .ASPXAUTH=EA9127C4A3002F1D5EA5AADC279....; expires=Tue, 27-Mar-2018 15:17:22 GMT; path=/
this is my Interceptor that initialized with dagger from My Application Class:
#AppScope
#Provides
public HttpLoggingInterceptor httpLoggingInterceptor() {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
#Override
public void log(String message) {
Timber.d(message);
}
});
return logging.setLevel(HttpLoggingInterceptor.Level.BODY);
}
How can i get Set-Cookie value?

Android - Sending .wav file using RETROFIT2 for Speaker Recognition

I'm trying to send a .wav file using Retrofit2 on Android in order to use the Create Enrollment request of the Microsoft Speaker Recognition API (https://dev.projectoxford.ai/docs/services/563309b6778daf02acc0a508/operations/56406930e597ed20c8d8549c)
But I always get the following Error 400:
com.mobile.cir.voicerecognition D/OkHttp: <-- 400 Bad Request https://api.projectoxford.ai/spid/v1.0/verificationProfiles/94BC205B-FACD-42A7-9D80-485403106627/enroll (3907ms)
com.mobile.cir.voicerecognition D/OkHttp: Cache-Control: no-cache
com.mobile.cir.voicerecognition D/OkHttp: Pragma: no-cache
com.mobile.cir.voicerecognition D/OkHttp: Content-Length: 123
com.mobile.cir.voicerecognition D/OkHttp: Content-Type: application/json; charset=utf-8
com.mobile.cir.voicerecognition D/OkHttp: Expires: -1
com.mobile.cir.voicerecognition D/OkHttp: X-AspNet-Version: 4.0.30319
com.mobile.cir.voicerecognition D/OkHttp: X-Powered-By: ASP.NET
com.mobile.cir.voicerecognition D/OkHttp: apim-request-id: e5472946-ec90-4662-a3c9-dda62c2c6b27
com.mobile.cir.voicerecognition D/OkHttp: Date: Fri, 12 Aug 2016 11:43:04 GMT
com.mobile.cir.voicerecognition D/OkHttp: }
com.mobile.cir.voicerecognition D/OkHttp: <-- END HTTP (123-byte body)
com.mobile.cir.voicerecognition D/EnableVoiceRecognition: Upload success
com.mobile.cir.voicerecognition D/errorĀ message: RequestError{code='null', message='null'}
Here is my Apiclient class:
public static Retrofit getClient() {
if (retrofit==null) {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(logging).build();
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient)
.build();
}
return retrofit;
}
The POST request:
#Multipart
#POST("verificationProfiles/{VerificationProfileId}/enroll")
Call<EnrollmentResponse> createEnrollment(#Path("VerificationProfileId") String profileId,
#Header("Content-Type") String contentType,
#Header("Ocp-Apim-Subscription-Key") String subscriptionKey,
#Part("file") RequestBody audioFile);
}
And the action itself:
File audioFile = new File(fileDirectory + "my_voice.wav");
RequestBody requestAudioFile = RequestBody.create(MediaType.parse("application/octet-stream"), audioFile);
Call<EnrollmentResponse> call = apiService.createEnrollment(PROFILE_ID_TEST,"audio/wav; samplerate=1600",API_KEY,requestAudioFile);
call.enqueue(new Callback<EnrollmentResponse>() {
#Override
public void onResponse(Call<EnrollmentResponse> call, Response<EnrollmentResponse> response) {
Log.d(TAG,"Upload success");
RequestError error = ErrorUtils.parseError(response);
Log.d("error message", error.toString());
Log.d(TAG,"Response: " + response.body().toString());
}
#Override
public void onFailure(Call<EnrollmentResponse> call, Throwable t) {
Log.d(TAG,"Upload error: " + t.getMessage());
}
});
Where am I doing wrong?
* EDIT *
Microsoft developers released the Android library for this API
(https://github.com/Microsoft/Cognitive-SpeakerRecognition-Android)

Can't get access token in android using retrofit but works only in curl

I have a problem with retrofit in android when I try to get the access token it doesn't work at all and I get "unauthorized 401" but using DHC byRESTlet I can get the access token without any problem.
This is the interface I use :
public interface TokenService {
#Headers({
"Content-Type : application/x-www-form-urlencoded",
"Authorization : Basic dGVzdDo="
})
#FormUrlEncoded
#POST("/oauth/token")
Call<TokenEntity> getAccessToken(#Field("username") String username,
#Field("password") String password ,
#Field("grant_type") String grantType );
}
and this is log error :
D/OkHttp: --> POST http://192.168.1.5:8080/oauth/token http/1.1
D/OkHttp: Content-Type: application/x-www-form-urlencoded
D/OkHttp: Content-Length: 52
D/OkHttp: Content-Type : application/x-www-form-urlencoded
D/OkHttp: Authorization : Basic dGVzdDo=
D/OkHttp: username=abcd&password=aqwzsx123&grant_type=password
D/OkHttp: --> END POST (52-byte body)
D/OkHttp: <-- 401 Unauthorized http://192.168.1.5:8080/oauth/token (21ms)
D/OkHttp: Server: Apache-Coyote/1.1
D/OkHttp: X-Content-Type-Options: nosniff
D/OkHttp: X-XSS-Protection: 1; mode=block
D/OkHttp: Cache-Control: no-cache, no-store, max-age=0, must-revalidate
D/OkHttp: Pragma: no-cache
D/OkHttp: Expires: 0
D/OkHttp: X-Frame-Options: DENY
D/OkHttp: Cache-Control: no-store
D/OkHttp: Pragma: no-cache
D/OkHttp: WWW-Authenticate: Bearer realm="oauth", error="unauthorized", error_description="Full authentication is required to access this resource"
D/OkHttp: Content-Type: application/json;charset=UTF-8
D/OkHttp: Transfer-Encoding: chunked
D/OkHttp: Date: Fri, 06 May 2016 07:44:03 GMT
D/OkHttp: OkHttp-Sent-Millis: 1462520643079
D/OkHttp: OkHttp-Received-Millis: 1462520643087
D/OkHttp: {"error":"unauthorized","error_description":"Full authentication is required to access this resource"}
{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}
<-- END HTTP (102-byte body)
ponse{protocol=http/1.1, code=401, message=Unauthorized, url=http://192.168.1.5:8080/oauth/token}
It does not seem like retrofit problem.
You may try using #Body instead of fields, try making class:
class Request {
String username;
...
}
and then
Call<TokenEntity> getAccessToken(#Body Request request);

Categories

Resources