【问题标题】:Volley Server error this site requires java script enabledVolley Server 错误此站点需要启用 java 脚本
【发布时间】:2016-09-20 12:43:09
【问题描述】:

我正在使用 volley 发送 Web 服务请求,并且 volley 响应是 SERVER ERROR(此站点需要启用 java 脚本)。我尝试了 POST 和 GET 方法。 在对这个问题进行一些搜索后,我发现了这两个问题.. Volley Server error (Requires javascript?) Android Development but there is no answer to solve this issue in 2 months

Disable Javascript on volley StringRequest but there is no answer to solve this issue in 6 months

没有找到更多问题和解决方案。谁能告诉这个问题的确切问题和解决方案。 这是我的代码

public void postRequest(final JSONObject jsonParams,final Handler handler){
    StringRequest stringRequest = new StringRequest(Request.Method.POST, AppConstants.ADMIN_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Message message = handler.obtainMessage();
                    message.obj = response;
                    handler.sendMessage(message);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Message message = handler.obtainMessage();
                    message.obj = error.toString();
                    Log.d("error",error.toString());
                    handler.sendMessage(message);
                }
            }){
        @Override
        protected Map<String,String> getParams(){
            Map<String,String> params = new HashMap<String, String>();

            Iterator<String> iter = jsonParams.keys();
            while (iter.hasNext()) {
                try {
                    String key = iter.next();
                    String value = jsonParams.get(key)+"";
                    params.put(key,value);

                } catch (JSONException e) {
                    // Something went wrong!
                    Message message = handler.obtainMessage();
                    message.obj = e.getMessage();
                    handler.sendMessage(message);
                }
            }
            return params;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String,String> headers = new HashMap<String, String>();
            return headers;
        }
    };

    MyVolley.getInstance(context).getRequestQueue().add(stringRequest);
}

网络服务代码是

<?php if(true) { echo 'request arrived'; } ?>

【问题讨论】:

  • 您向哪个站点发送请求?
  • 我正在使用一个免费的托管网站.. Base.pk
  • 我认为如果你点击一个需要 javascript 的网页,它会遇到这个错误,但你不应该向这样的网站发出这样的请求,这就是我想知道的原因。您是否尝试点击旨在为用户提供 UI 或其他任何内容的网址?
  • 不,Web 服务代码中没有 UI。我尝试了一个简单的响应,并且从浏览器请求 url 工作正常..

标签: android android-volley android-webservice


【解决方案1】:

this 回答中建议了一个很好的解决方法。

在 Volley 中,您可以覆盖 getHeaders() 方法以将 cookie 与您的 HTTP 请求一起发送。

代码:

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    Map<String, String> map = new HashMap<>();
    map.put("Cookie", "__test=YOUR COOKIE HERE; expires=Friday, January 1, 2038 at 5:25:55 AM; path=/");
    return map;
}

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,没有直接的解决方案 问题是:- 一些服务器不允许这些类型的请求,它们只允许 Web 浏览器

    解决方案:-

    1. 在您的应用程序中实现webview,无需任何 UI(如果您是 期待 Json 响应)。
    2. setWebwiewclient() 内覆盖onPageFinished
    3. 通过String cookies = CookieManager.getInstance().getCookie(url);获取页面cookie
    4. 在获取 cookie 后,将 cookie 传递到 volley request 的 header 中 由key="cookie"

    代码参考:-

       WebView webViewRequest=new WebView("your app context");
    
        webViewRequest.getSettings().setJavaScriptEnabled(true);
        webViewRequest.setWebViewClient(new WebViewClient());
        webViewRequest.getSettings().setLoadWithOverviewMode(true);
        webViewRequest.getSettings().setUseWideViewPort(true);
        webViewRequest.getSettings().setSupportZoom(false);
        webViewRequest.getSettings().setBuiltInZoomControls(false);
        webViewRequest.getSettings().setDisplayZoomControls(false);
        webViewRequest.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webViewRequest.requestFocusFromTouch();
        webViewRequest.getSettings().setAppCacheEnabled(false);
        webViewRequest.setScrollbarFadingEnabled(false);
    
        webViewRequest.setWebViewClient(new WebViewClient(){
    
    
            @Override
            public void onPageFinished(WebView view, String url) {
          cookies = CookieManager.getInstance().getCookie(url);//here you will get cookie
                Log.d(TAG, "onPageFinished: "+cookies);
                StringRequest Request = new StringRequest(url, new 
         Response.Listener<String>() {
    
    
                    @Override
                    public void onResponse(String response) {
                        Log.d(TAG, "onResponse: "+response.toString());
                       // your data from server
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
    
                    }
                }){
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
    
                        Map<String, String> map = new HashMap<>();
                        map.put("Cookie", cookies);
                        return map;
                    }
                };
                Mysingleton.getMinstance(DashboardActivity.context).addToRequestQue(Request);
    
            }
        });
        webViewRequest.loadUrl("your url here");
    
    }
    

    【讨论】:

      【解决方案3】:

      我最近遇到了这个错误!您的代码完全没问题,但问题出在您的虚拟主机上。 (是字节主机)? 它有一个机器人检测器正在运行,它不会让你的 Android 凌空请求进入。不幸的是,这不能被禁用/关闭。 尝试更改您的网络托管服务。 希望对你有帮助☺

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-29
        • 2012-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-23
        • 2021-06-04
        相关资源
        最近更新 更多