我正在使用Graph Story neo4j服务器,我正在使用Android应用程序中的REST API。
我使用这样的网址https://uName:pass@host:port
这个相同的网址和我设置的http参数和标头在chrome Rest Client中工作,但是当我使用我的Android应用程序时,我从neo4j得到401状态错误。
从我的MainActivity中调用它:
new RegisterRestTask().execute("https://GraphStoryUsername:GraphStoryPassword@GraphStoryNeo4jInstanceURL:7473/db/data/cypher");
这是我的AsyncTask代码:
public class RegisterRestTask extends AsyncTask<String,Void,String> {
@Override
protected String doInBackground(String... urls) {
HttpClient httpClient=new DefaultHttpClient();
HttpPost httpPost=new HttpPost(urls[0]);
String json="{ \"query\":\"Match n return n\"} ";
try {
JSONObject postJsonObject=new JSONObject(json);
StringEntity jsonEntity=new StringEntity(postJsonObject.toString(),"UTF-8");
httpPost.setHeader("Accept", "application/json; charset=UTF-8");
httpPost.setHeader("Content-type", "application/json");
httpPost.setEntity(jsonEntity);
//httpPost.setHeader("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36");
HttpResponse httpResponse = httpClient.execute(httpPost);
Log.e("response",Integer.toString(httpResponse.getStatusLine().getStatusCode()));
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
答案 0 :(得分:1)
401通常表示您需要传递凭据(而不是表示凭据被拒绝的403)。
Chrome会获取URL中的用户名/密码参数,并将其作为HTTP Basic Auth传递。它没有明确地发送它们。这是一个特殊的客户端功能(存在于许多客户端上)。您需要设置Android应用的HTTP请求以使用基本身份验证。
如果你展示你的Android代码,某人(也许是我自己)可以帮助你做出改变。