首页
学习
活动
专区
圈层
工具
发布

Moodle
EN

Stack Overflow用户
提问于 2014-09-24 14:51:11
回答 2查看 2.3K关注 0票数 1

我正在使用开源项目中的TokenHttpRequest类:

代码语言:javascript
复制
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站点im访问更新到2.7。现在,httpClient.execute行给出了错误禁止403。在浏览器中,url可以正常工作。

我得到的是:

代码语言:javascript
复制
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)

还包括:

代码语言:javascript
复制
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获取实体时

有人有这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2014-09-25 16:52:33

第一次设置这个是很痛苦的,但是有一些步骤可能会帮助您解决这个问题。

  1. 首先,Moodle上有一个已知的bug,当您在web上创建外部服务时,它没有在数据库上正确地创建短名称。您可以通过访问数据库、转到表external_services并手动添加在请求中使用的短名称来修复它。
  2. 为组启用权限。这可能是您的问题,要解决这个问题,您需要使用Users>Permissions>Define角色。在那里编辑其中一个角色,使它能够创建令牌和访问REST协议。(我通常允许为移动和创建令牌创建令牌)
  3. 完成最后一步后,请确保将此角色分配给您要访问的用户,然后在系统中分配角色并单击该角色。
  4. 最后,如果所有这些都不起作用,请尝试搜索所有可能显示WebService!:)的复选框的所有设置。)

希望这能帮到你和其他像我这样的人,让他们花上整整一周的时间!

票数 2
EN

Stack Overflow用户

发布于 2020-07-10 19:23:53

在Moodle 3.8上,您可以采取以下步骤来设置它:

  1. 启用网站管理->高级功能的web服务。
  2. 启用Moodle移动web服务在网站管理,->插件,->网络服务,->外部服务。
  3. 在站点管理->插件-> Web服务->管理协议中启用所需的协议。
  4. 为您计划用于在-> Plugins -> Web ->管理令牌上进行API调用的用户生成一个令牌。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26020016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档