В моем проекте мне нужно получить доступ к успокоительному api, предоставленному drupal7. При доступе к api с почтовым запросом я должен предоставить идентификатор токена и сеанса в заголовке запроса. Я тестирую (плакат, плагин firefox для тестирования restful api) и правильно добавляет Cookie и X-CRSF-токен в заголовок раздела Poster, сервер извлекает этот json «{« status »: 0,« message »:« username уже существует ! Введите другое имя. "}".добавить токен в заголовке сообщения для запроса на drupal rest api с модифицированным андроидом
Вот мой андроид код для доступа к такому же запросу апите на плакате с таким же 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)
Это то, что ваш api требует имя пользователя и пароль в теле запроса? Если да, вы передаете тело по запросу? – Avi
Я уже вхожу в систему, отправив имя пользователя и пароль в контенте по json-формату, после успешного входа в систему сервер возвращает cookie и токен. На плакате я использовал этот файл cookie и токен в заголовке запроса на отправку. – SAWAUNG