【问题标题】:PUT Variables Missing between Python and TomcatPython 和 Tomcat 之间缺少 PUT 变量
【发布时间】:2010-07-16 16:29:23
【问题描述】:

我正在尝试将来自 Python 的 PUT 请求放入 Tomcat 中的 servlet。进入Tomcat时参数丢失。

相同的代码很适合 POST 请求,但不适用于 PUT。

这是客户:

lConnection = httplib.HTTPConnection('localhost:8080')
lHeaders = {"Content-type": "application/x-www-form-urlencoded",
              "Accept": "text/plain"}
lParams = {'Username':'usr', 'Password':'password', 'Forenames':'First','Surname':'Last'}
lConnection.request("PUT", "/my/url/", urllib.urlencode(lParams), lHeaders)

一旦进入服务器,request.getParameter("Username") 将返回 null。

有没有人知道我在哪里丢失了参数?

【问题讨论】:

    标签: python http tomcat put


    【解决方案1】:

    我尝试了您的代码,似乎参数使用该代码到达服务器。 Tcpdump 给出:

    PUT /my/url/ HTTP/1.1
    Host: localhost
    Accept-Encoding: identity
    Content-Length: 59
    Content-type: application/x-www-form-urlencoded
    Accept: text/plain
    
    Username=usr&Password=password&Surname=Last&Forenames=First
    

    所以请求正确到达另一端,它必须是tomcat配置或试图读取参数的代码。

    【讨论】:

      【解决方案2】:

      我不知道您代码的 Tomcat 端是什么样子,或者 Tomcat 如何处理和提供对请求参数的访问,但我的猜测是 Tomcat 不会“自动”将您的 PUT 请求的正文解析为给你很好的请求参数。

      我在 App Engine 上使用内置的 webapp 框架(在 Python 中)遇到了完全相同的问题。它没有将我的 PUT 请求的正文解析为可通过 self.request.get('param') 获得的请求参数,即使它们以 application/x-www-form-urlencoded 的形式出现。

      不过,您必须检查 Tomcat 端以确认这一点。您最终可能不得不访问 PUT 请求的正文并自己解析出参数。

      是否应该期望您的 Web 框架自动解析出 PUT 请求中的 application/x-www-form-urlencoded 参数(就像处理 POST 请求一样)是值得商榷的。

      【讨论】:

      • 我认为你可能是对的。现在对我来说没什么大不了的 - 我会改用 POST 来满足我的需要。
      【解决方案3】:

      我在这里猜测,但我认为问题在于 PUT 不应该以这种方式使用。 PUT 的目的是将请求中包含的单个实体存储到标头中指定的资源中。用户名之类的都是什么东西?

      您的内容类型是application/X-www-form-urlencoded,这是一堆字段内容。 PUT 想要的是一个编码文件之类的东西。你知道,它可以在某个地方存储一堆数据。

      【讨论】:

      • 这是我的第一个 REST 接口。仔细阅读,看起来 PUT 应该只用于完全替换,而我在这里尝试做的是更新现有用户。 POST可能是要走的路。谢谢。对en.wikipedia.org/wiki/Representational_State_Transfer的“RESTful Web 服务”部分感到困惑
      • Http 方法本身并不关心内容类型,您可以将 PUT 用于您喜欢的任何内容类型。对于 REST 接口,您是对的,它应该替换该资源中的所有内容,但没有什么能阻止您为此使用 application/x-www-form-urlencoded 内容类型。
      猜你喜欢
      • 2012-09-11
      • 2015-01-30
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多