Je crée une application Android qui parle au module Services à l'aide de REST endpoint. Lorsque je publie du contenu sans définir le cookie "has_js = 1" dans le = REST endpoint au format JSON, mon contenu n'est jamais accepté par Drupal ou module de service).
Quelle est l'utilisation du cookie has_js et pourquoi dois-je envoyer avec mes demandes POST?
Mise à jour:
Voici mon code pour publier le type de contenu de l'article. Si je n'ajoute pas le cookie has_js = 1, l'article ne sera pas publié sur le site Drupal.
protected Integer doInBackground(String... params) {
//read session_name and session_id from passed parameters
String session_name=params[0];
String session_id=params[1];
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://ec2-54-***-**-***.us-west-2.compute.amazonaws.com/cmac/rest/node");
try {
//get title and body UI elements
TextView txtTitle = (TextView) findViewById(R.id.editTitle);
TextView txtBody = (TextView) findViewById(R.id.editBody);
//extract text from UI elements and remove extra spaces
String title=txtTitle.getText().toString().trim();
String body=txtBody.getText().toString().trim();
//create JSON object to pass to Services endpoint
JSONObject json= new JSONObject(" { \"title\":\""+title+"\",\"type\":\"article\",\"body\":{\"und\":[{ \"value\":\""+body+"\"}]}}");
StringEntity se = new StringEntity( json.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httppost.setEntity(se);
BasicHttpContext mHttpContext = new BasicHttpContext();
CookieStore mCookieStore = new BasicCookieStore();
//create the session cookie
BasicClientCookie cookie = new BasicClientCookie(session_name, session_id);
cookie.setVersion(0);
cookie.setDomain(".ec2-54-***-**-***.us-west-2.compute.amazonaws.com");
cookie.setPath("/");
mCookieStore.addCookie(cookie);
cookie = new BasicClientCookie("has_js", "1");
mCookieStore.addCookie(cookie);
mHttpContext.setAttribute(ClientContext.COOKIE_STORE, mCookieStore);
httpclient.execute(httppost,mHttpContext);
return 0;
}catch (Exception e) {
Log.v("Error adding article",e.getMessage());
}
return 0;
}
Le cookie has_js a été utilisé par Batch API . Sans ce cookie, ou lorsque JS est désactivé dans le navigateur client, l'API batch vous donnera un WSOD.
Voir $ _ COOKIE ['has_js'] doit mourir .
Si votre point de terminaison de service traite en interne l'API Batch, vous aurez ce problème.