1

何らかの理由で、jQuery (1.4.4) から CherryPy サーバー (3.1.2) に DELETE HTTP 要求を行うと、パラメーターが送信されません。POST、GET、および PUT リクエストは、パラメーターを問題なく送信しています。

CherryPy サーバーコードは次のとおりです。

import cherrypy

class DeleteExample(object):
    exposed = True

def PUT(self, *args, **kwargs):
    print kwargs

def DELETE(self, *args, **kwargs):
    print kwargs

global_conf = {'global': {'server.socket_port': 8080},
            '/': {'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
                  'tools.staticdir.root': '/home/kevin/workspace/delete_example',
                      'tools.staticdir.on': True,
                      'tools.staticdir.dir': 'src',
                      'tools.staticdir.index': 'index.html'}
            }
cherrypy.quickstart(DeleteExample(), config=global_conf)

jQuery コードを含む index.html は次のとおりです。

<html>
    <head>
        <script type="text/javascript" src="jquery-1.4.4.js"></script>
        <script>
       $(document).ready(function() {
           $.ajax({
           type: "PUT",
           url: "http://localhost:8080",
           dataType: "json",
           data: {first: 10, second: 200}
            });

            $.ajax({
            type: "DELETE",
            url: "http://localhost:8080",
            dataType: "json",
            data: {first: 10, second: 200}
            });
        });
       </script>
    </head>
    <body>
    </body>
</html>

これは、CherryPy Web サーバーから出力されたものです。

{'second': '200', 'first': '10'}
127.0.0.1 - - [23/Jan/2011:04:02:48] "PUT / HTTP/1.1" 200 19 "http://localhost:8080/" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13"
{}
127.0.0.1 - - [23/Jan/2011:04:02:51] "DELETE / HTTP/1.1" 200 19 "http://localhost:8080/" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13"

ご覧のとおり、.ajax 関数を使用して作成された PUT および DELETE リクエストは、タイプを除いてまったく同じです。しかし、何らかの理由で、PUT はすべてのパラメーターを送信しますが、DELETE はパラメーターを送信しません。

DELETE リクエストが適切なパラメータを送信していない理由を知っている人はいますか?

4

2 に答える 2

3

リクエスト本文を含む DELETE リクエストを送信しようとしているようですが、これは ...珍しい. (同じことが GET にも当てはまります)。

于 2011-01-23T10:24:24.060 に答える
0

私は非常によく似た問題を抱えていました。本文でリクエストを送信することが非常に必要でした。変数kwargsも空でした。この解決策を見つけました:

cherrypy.request.body.readline()

戻ります

b'somekey=2cefe65093df'

あなたはそのようなことをすることができます

import urllib.parse
...
urllib.parse.parse_qs(cherrypy.request.body.readline().decode("utf-8"))

戻ります

{'somekey': ['2cefe65093df']}
于 2022-01-04T01:27:33.647 に答える