我正在使用开源项目中的TokenHttpRequest类:
public String doHTTPRequest(String url){
String responseBody = "";
String token = "";
DefaultHttpClient httpClient = new DefaultHttpClient();
// Creating HTTP Post
HttpGet httpPost = new HttpGet(url);
try {
ResponseHandler<String> responseHandler=new BasicResponseHandler();
HttpContext context = new BasicHttpContext(); context.setAttribute(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0");
responseBody = httpClient.execute(httpPost, responseHandler, context);
JSONObject jObject = new JSONObject(responseBody);
token = jObject.getString("token");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// writing exception to log
e.printStackTrace();
} catch (IOException e) {
// writing exception to log
e.printStackTrace();
}
return token;
}
一直运行良好,直到moodle网站访问更新到2.7。
现在httpClient.execute
行给出了Forbidden 403错误。在浏览器中,url工作正常。
这就是我得到的:
09-24 17:42:58.246: W/System.err(8820): org.apache.http.client.HttpResponseException: Forbidden
09-24 17:42:58.246: W/System.err(8820): at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71)
09-24 17:42:58.246: W/System.err(8820): at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
09-24 17:42:58.246: W/System.err(8820): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
09-24 17:42:58.246: W/System.err(8820): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
09-24 17:42:58.246: W/System.err(8820): at moodle.android.moodle.helpers.TokenHttpRequest.doHTTPRequest(TokenHttpRequest.java:86)
09-24 17:42:58.246: W/System.err(8820): at ro.example.app.Login$2.run(Login.java:170)
09-24 17:42:58.246: W/System.err(8820): at java.lang.Thread.run(Thread.java:841)
还有:
09-24 17:13:51.986: I/entity(2975): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
09-24 17:13:51.986: I/entity(2975): <html><head>
09-24 17:13:51.986: I/entity(2975): <title>403 Forbidden</title>
09-24 17:13:51.986: I/entity(2975): </head><body>
09-24 17:13:51.986: I/entity(2975): <h1>Forbidden</h1>
09-24 17:13:51.986: I/entity(2975): <p>You don't have permission to access /login/token.php
09-24 17:13:51.986: I/entity(2975): on this server.</p>
09-24 17:13:51.986: I/entity(2975): </body></html>
当我尝试使用EntityUtils
有人有这个问题吗?
答案 0 :(得分:2)
第一次设置这是一个真正的痛苦,但有一些步骤可能会帮助你弄明白。
首先,Moodle上存在一个已知的错误,即当您在Web上创建外部服务时,它不会在数据库上正确创建短名称。您可以通过访问数据库,转到表external_services并手动添加您在请求中使用的短名称来修复它。
启用群组权限。这可能是您的问题,要解决此问题,您需要进入用户&gt;权限&gt;定义角色。编辑其中一个角色后,启用它以创建令牌并访问REST协议。 (我通常允许为移动创建令牌并创建令牌)
完成最后一步后,请务必将此角色分配给您尝试访问的用户,然后转到“在系统中分配角色”并单击该角色。
最后,如果所有这些都不起作用,请尝试在整个设置中搜索任何可能的关于WebService的复选框! :)
希望能帮助你和像我这样的人一整天都坚持下去!
答案 1 :(得分:0)
在Moodle 3.8上,您可以按照以下步骤进行设置: