Android RESTエンドポイントを使用してサービスモジュールと通信するアプリを作成しています。「has_js = 1」Cookieを=に設定せずにコンテンツを投稿するとRESTエンドポイントのJSON形式、私のコンテンツはDrupalまたはサービスモジュールで受け入れられません。
Has_js Cookieの使用とは何ですか。なぜPOSTリクエストと共に送信する必要があるのですか?
更新:
以下は、記事のコンテンツタイプを投稿するための私のコードです。 has_js = 1 Cookieを追加しないと、記事は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;
}
Has_js Cookieは Batch API で使用されています。このCookieがない場合、またはクライアントブラウザでJSが無効になっている場合、バッチAPIはWSODを提供します。
$ _ COOKIE ['has_js'] must die を参照してください。
サービスエンドポイントが内部でBatch APIを処理している場合、この問題が発生します。