当前位置: 首页 > 知识库问答 >
问题:

删除带有标头和参数的请求

弓胜泫
2023-03-14

您好,我想使用截取标题和正文参数向服务器发送删除请求。但我无法成功发送请求

我试过的

JSONObject jsonbObjj = new JSONObject();
try {
    jsonbObjj.put("nombre", Integer.parseInt(no_of_addition
            .getText().toString()));
    jsonbObjj.put("cru", crue);
    jsonbObjj.put("annee", 2010);
} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
VolleyRequest mVolleyRequest = new VolleyRequest(
        Method.DELETE, url, jsonbObjj,

        new Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject jsonObject) {
                // TODO Auto-generated method stub

                if (pDialog != null) {
                    pDialog.dismiss();
                }
                Log.e("Server Response", "response = "
                        + jsonObject.toString());
            }

        }, new ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError arg0) {
                // TODO Auto-generated method stub
                if (pDialog != null) {
                    pDialog.dismiss();
                }
                Log.e("Error Response",
                        "Error " + arg0.getMessage());
                Log.e("Error Response",
                        "Error = " + arg0.getCause());

            }
        }, mUserSession.getUserEmail(), mUserSession
                .getUserPassword(), false);

ApplicationController.getInstance().addToRequestQueue(
        mVolleyRequest, "deleteRequest");

这是我的截击请求课

public class VolleyRequest extends JsonObjectRequest {

    String email, pass;
    boolean saveCookeis;

    public VolleyRequest(int method, String url, JSONObject jsonRequest,
            Listener<JSONObject> listener, ErrorListener errorListener,
            String email, String pass, boolean saveCookie) {
        super(method, url, jsonRequest, listener, errorListener);
        // TODO Auto-generated constructor stub
        this.email = email;
        this.pass = pass;
        this.saveCookeis = saveCookie;
    }

    public VolleyRequest(int method, String url, JSONObject jsonRequest,
            Listener<JSONObject> listener, ErrorListener errorListener) {
        super(Method.POST, url, jsonRequest, listener, errorListener);
        // TODO Auto-generated constructor stub

    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        // TODO Auto-generated method stub
            HashMap<String, String> params = new HashMap<String, String>();

            String auth = "";
            try {
                auth = android.util.Base64.encodeToString(
                        (this.email + ":" + this.pass).getBytes("UTF-8"),
                        android.util.Base64.DEFAULT);
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            params.put("Authorization", auth);
            return params;
    }

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        // TODO Auto-generated method stub

        if (saveCookeis) {
            try {
                String jsonString = new String(response.data,
                        HttpHeaderParser.parseCharset(response.headers));

                ApplicationController.getInstance().checkSessionCookie(
                        response.headers);

                return Response.success(new JSONObject(jsonString),
                        HttpHeaderParser.parseCacheHeaders(response));

            } catch (UnsupportedEncodingException e) {
                return Response.error(new ParseError(e));
            } catch (JSONException je) {
                return Response.error(new ParseError(je));
            }
        }
        return super.parseNetworkResponse(response);

    }

}

当我尝试此代码时,我收到400响应代码错误。如果有人可以帮助我,请告诉我。。这就是我做错的地方。谢谢

这里是我测试的deleteapi的屏幕截图,它工作正常。

共有2个答案

公孙锋
2023-03-14
url = "http://httpbin.org/delete"; //example URL


//constructor class
public VolleyLoader(Context context) {
        this.context = context;
        queue = Volley.newRequestQueue(context);
}


public void deleteData(String idData, callback callback){
  Uri uri = Uri.parse(URL+ idData).buildUpon()
                .build();

StringRequest dr = new StringRequest(Request.Method.DELETE, uri.toString, 
    new Response.Listener<String>() 
    {
        @Override
        public void onResponse(String response) {
            // response
            Toast.makeText($this, response, Toast.LENGTH_LONG).show();
        }
    }, 
    new Response.ErrorListener() 
    {
         @Override
         public void onErrorResponse(VolleyError error) {
             // error.
              
       }
    }
);
queue.add(dr);    

}

// use that method to delete data when web api only provide "id_data" to delete in header  
危彬彬
2023-03-14

更新:

我已将我的工作示例项目发布到GitHub,以修复java。网ProtocolException:DELETE不支持写入,请查看。

您的应用程序收到了400错误代码,因为数据体未随DELETE请求一起发送。

在烟囱里面。java,您将发现以下内容:

            case Method.DELETE:
                connection.setRequestMethod("DELETE");
                break;
            case Method.POST:
                connection.setRequestMethod("POST");
                addBodyIfExists(connection, request);
                break;

因此,我们可以看到DELETE请求忽略了主体数据。有一个变通方法,那就是你创建一个CustomHurlStack类(复制上面的HurlStack的所有内容),只有以下修改:

            case Request.Method.DELETE:
                connection.setRequestMethod("DELETE");
                addBodyIfExists(connection, request);
                break;

然后,在活动中,呼叫:

CustomHurlStack customHurlStack = new CustomHurlStack();
RequestQueue queue = Volley.newRequestQueue(this, customHurlStack);

请注意,此变通方法仅适用于API21(API20我尚未测试)。从API19-,java.net.协议异常:DELETE不支持写入将被抛出。

P/S:adduseLibrary'组织。阿帕奇。http。您的构建中的遗留'。如果您的应用程序编译了DK23版,并且在创建CustomHurlStack类时出错,则升级文件。

希望这能有所帮助!

 类似资料:
  • 我在ReactJS中编程时使用Axios,我假装向服务器发送DELETE请求。 为此,我需要标题: 而身体是由 我一直在互联网上搜索,只发现DELETE方法需要一个“参数”,不接受“数据”。 我一直试图这样发送: 或者甚至 但似乎没有什么工作... 有人能告诉我是否有可能(我想是这样)发送一个包含标题和正文的删除请求,以及如何做到这一点吗? 提前谢谢你!

  • 问题内容: 我在ReactJS编程时使用Axios,我假装将DELETE请求发送到我的服务器。 为此,我需要标题: 身体是由 我一直在互联网上进行搜索,仅发现DELETE方法需要一个“参数”,并且不接受“数据”。 我一直试图像这样发送它: 甚至 但是似乎没有任何作用… 有人可以告诉我是否有可能(可能是这样)发送带有标头和正文的DELETE请求,以及如何发送? 先感谢您! 问题答案: 因此,经过多次

  • 我有一个angular应用程序,只要我按照以下步骤添加serviceWorker: https://github.com/angular/angular-cli/blob/master/docs/documentation/build.md#service-workerhttps://angular.io/guide/service-worker-getting-started …我的API请求不

  • 问题内容: 我有一个简单的PHP脚本,正在尝试跨域CORS请求: 但是我仍然得到错误: 请求标头字段不允许 我有什么想念的吗? 问题答案: 不允许作为可接受的值,请参阅此处的Mozilla文档。 您应该发送可接受的标头(而不是如星号所示)而不是星号。

  • 问题内容: 在swift 3中建议使用带参数的GET的哪种方法? 范例: 提前致谢 ! 问题答案: 示例如何使用请求。

  • 试图将axios post请求从Vue应用程序(localhost)发送到我的nodejs API(localhost和heroku)。 如果请求是在没有数据或头的情况下发送的,则接收响应不会有问题,但是当我添加它们时,我会收到以下错误: 我已经尝试了不同的选择,服务器端和客户端,建议类似的问题,但没有成功。 客户端请求: 服务器endpoint: 我尝试了一些答案: 对预飞行请求的响应没有通过访