2015-12-17 3 views
0

В моем проекте мне нужно получить доступ к успокоительному api, предоставленному drupal7. При доступе к api с почтовым запросом я должен предоставить идентификатор токена и сеанса в заголовке запроса. Я тестирую (плакат, плагин firefox для тестирования restful api) и правильно добавляет Cookie и X-CRSF-токен в заголовок раздела Poster, сервер извлекает этот json «{« status »: 0,« message »:« username уже существует ! Введите другое имя. "}".добавить токен в заголовке сообщения для запроса на drupal rest api с модифицированным андроидом

enter image description here

Вот мой андроид код для доступа к такому же запросу апите на плакате с таким же Cookie и X-CRSF-токеном, но сервер возвращает «Доступ запрещен для анонимного пользователя».

Любое предложение очень ценится,

Благодаря

public void StoreCreateAsync(){ 
    dialog = new ProgressDialog(mContext); 
    dialog.setMessage("Please wait...."); 
    dialog.show(); 

    final String token = pref.getString(Constants.token,""); 
    final String cookie = pref.getString(Constants.session,""); 

    //token = "dWGgzRIPAZt9YI48W2DCPny9Fk8WcPh_ifBgdZ5f8x4"; 
    //cookie = "SESSeef809303b051915f45008580b17a51axQHOT-12m7WHfdU6Xa5vkS3SHfZ5Lhuj3Brgp-uAVyo"; 

    // for handle socketTimeoutException 
    OkHttpClient client = new OkHttpClient(); 
    client.setConnectTimeout(3, TimeUnit.MINUTES); 
    client.setReadTimeout(3, TimeUnit.MINUTES); 

    //for header parameter 
    //method 1 
    RequestInterceptor requestInterceptor = new RequestInterceptor() { 
     @Override 
     public void intercept(RequestFacade request) { 
      request.addHeader("Cookie", "SESSeef809303b051915f45008580b17a51axQHOT-12m7WHfdU6Xa5vkS3SHfZ5Lhuj3Brgp-uAVyo"); 
      request.addHeader("X-CSRF-Token", "dWGgzRIPAZt9YI48W2DCPny9Fk8WcPh_ifBgdZ5f8x4"); 
     } 
    }; 

    para user_para = new para(); 
    user_para.storeName = txtName.getText().toString(); 

    restAdapter = new RestAdapter.Builder() 
      .setEndpoint(Constants.BaseUrl) 
      .setRequestInterceptor(requestInterceptor) 
      .setClient(new OkClient(client)) 
      .setLogLevel(RestAdapter.LogLevel.FULL).build(); 

    ApiStoreCreate apiStoreCreate = restAdapter.create(ApiStoreCreate.class); 
    apiStoreCreate.postUserStore(user_para,new Callback<obj_store_create>(){ 

     @Override 
     public void success(obj_store_create obj_store_create, Response response) { 
      dialog.dismiss(); 
      if(response.getStatus() == 200){ 
       Toast.makeText(mContext, obj_store_create.message, Toast.LENGTH_SHORT).show(); 

       edit.putString(Constants.storeName, obj_store_create.storeName); 
       edit.apply(); 
      } 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      dialog.dismiss(); 
      response = error.getResponse(); 
      Log.i(tag, String.valueOf(response.getStatus())); 
      if(response.getStatus() != 200) { 
       Toast.makeText(mContext, "Error Status -> "+ response.getStatus() + ". Error -> " + response.getReason() ,Toast.LENGTH_SHORT).show(); 

      } 
     } 
    }); 



12-17 11:52:09.950: D/Retrofit(27129): ---> HTTP POST http://127.0.0.1/api/v1/store.json 
12-17 11:52:09.950: D/Retrofit(27129): Cookie: SESSeef809303b051915f45008580b17a51axQHOT-12m7WHfdU6Xa5vkS3SHfZ5Lhuj3Brgp-uAVyo 
12-17 11:52:09.950: D/Retrofit(27129): X-CSRF-Token: dWGgzRIPAZt9YI48W2DCPny9Fk8WcPh_ifBgdZ5f8x4 
12-17 11:52:09.950: D/Retrofit(27129): Content-Type: application/json; charset=UTF-8 
12-17 11:52:09.950: D/Retrofit(27129): Content-Length: 26 
12-17 11:52:09.950: D/Retrofit(27129): {"storeName":"sawyyyyyuu"} 
12-17 11:52:09.950: D/Retrofit(27129): ---> END HTTP (26-byte body) 

12-17 11:52:15.160: D/Retrofit(27129): <--- HTTP 403 http://127.0.0.1/api/v1/store.json (5215ms) 
12-17 11:52:15.160: D/Retrofit(27129): Date: Thu, 17 Dec 2015 05:22:31 GMT 
12-17 11:52:15.160: D/Retrofit(27129): Server: Apache/2.4.9 (Win32) OpenSSL/0.9.8y PHP/5.4.27 
12-17 11:52:15.160: D/Retrofit(27129): X-Powered-By: PHP/5.4.27 
12-17 11:52:15.160: D/Retrofit(27129): Expires: Sun, 19 Nov 1978 05:00:00 GMT 
12-17 11:52:15.160: D/Retrofit(27129): Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0 
12-17 11:52:15.170: D/Retrofit(27129): Content-Length: 36 
12-17 11:52:15.170: D/Retrofit(27129): Keep-Alive: timeout=5, max=100 
12-17 11:52:15.170: D/Retrofit(27129): Connection: Keep-Alive 
12-17 11:52:15.170: D/Retrofit(27129): Content-Type: application/json 
12-17 11:52:15.170: D/Retrofit(27129): OkHttp-Selected-Protocol: http/1.1 
12-17 11:52:15.170: D/Retrofit(27129): OkHttp-Sent-Millis: 1450329730132 
12-17 11:52:15.170: D/Retrofit(27129): OkHttp-Received-Millis: 1450329735171 
12-17 11:52:15.170: D/Retrofit(27129): ["Access denied for user anonymous"] 
12-17 11:52:15.170: D/Retrofit(27129): <--- END HTTP (36-byte body) 
+0

Это то, что ваш api требует имя пользователя и пароль в теле запроса? Если да, вы передаете тело по запросу? – Avi

+0

Я уже вхожу в систему, отправив имя пользователя и пароль в контенте по json-формату, после успешного входа в систему сервер возвращает cookie и токен. На плакате я использовал этот файл cookie и токен в заголовке запроса на отправку. – SAWAUNG

ответ

0

Я думаю, что ваш апи Подписчиков OAuth и они знают тип устройства вы делаете запрос. Поэтому поэтому не идентифицирует маркер, который вы передаете в запросе.

Если вы хотите увидеть четкое различие между как request-> 1. Запрос от веб 2. Запрос от Mobile

Использование RequestBin это обеспечит вам конечной точки и когда вы делаете запрос просто заменить ваш фактическая конечная точка с предоставленной конечной точкой RequestBin. После выполнения вашего запроса вы можете проверить уволенный запрос со всем контентом, например: - заголовки, тело и тип контента на сайте RequestBin не закрывают браузер после получения конечной точки ожидания и диагностики вашего запроса. Вы можете проверить, где именно вы делаете ошибку.