Volley Server错误此站点需要启用java脚本

时间:2016-05-23 14:56:25

标签: android android-volley android-webservice

我正在使用volley发送Web服务请求,并且齐射响应是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'; } ?>

3 个答案:

答案 0 :(得分:1)

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

解决方案:-

  1. 在没有任何用户界面的情况下在您的应用中实施webview(如果您是 期待Json的回应)。
  2. onPageFinished内部覆盖setWebwiewclient()
  3. 通过以下方式获取页面Cookie:String cookies = CookieManager.getInstance().getCookie(url);
  4. 获取cookie后,将cookie传递到凌空请求的标头中 由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");

}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

this回答中提出了一个很好的解决方法。

在Volley中,您可以覆盖fun merge ([], l2) = l2 | merge (l1, []) = l1 | merge (l1 as x :: xs, l2 as y :: ys) = if x < y then x :: merge (xs, l2) else y :: merge (l1, ys) 方法以使用您的HTTP请求发送Cookie。

代码:

getHeaders()