【问题标题】:What is Apache-HttpClient/UNAVAILABLE error (Android, Google App Engine)?什么是 Apache-HttpClient/UNAVAILABLE 错误(Android、Google App Engine)?
【发布时间】:2013-06-10 13:39:38
【问题描述】:

我遇到了一个我不知道如何解释的问题。我正在使用 Android 和 Google App Engine 做一个项目。当我尝试直接从 servlet(硬编码)将信息保存在 Google App Engine 的大表中时 - 保存没有问题。但是当我尝试从我的 Android 设备保存数据时,没有执行保存,并且日志显示 Apache-HttpClient/UNAVAILABLE 错误。具体来说:

405 55ms 0kb Apache-HttpClient/UNAVAILABLE (java 1.4)
82.155.246.249 - - [10/Jun/2013:05:20:59 -0700] "POST /servletnamehere HTTP/1.1"           405 306 - "Apache-HttpClient/UNAVAILABLE (java 1.4)" "appnamehere.appspot.com" ms=56 cpu_ms=21 cpm_usd=0.000034 app_engine_release=1.8.0 instance=00c61b117cede3f754aa1ece730dc88287a20199

我看到 405 HTTP 错误出现在 POST 方法的上下文中(“405 错误经常出现在 POST 方法中。您可能试图在网站上引入某种输入表单,但并非所有 ISP 都允许处理表单所必需的 POST 方法。”)=> 实际上,我正在尝试使用 POST 方法在数据库中执行添加(对象是 JPA 实体)。我从我的 Android 设备接收到的数据是通过输入流进行序列化的(在我的情况下,不能使用 JSON,这些是规范)。

此外,306 HTTP 错误指的是切换代理。虽然这个错误可能有点直观,但这个错误超出了我学生的知识范围。

我已按照本教程(http://trumpy.cs.elon.edu/joel/sigcse2011/)的说明进行操作,这确实是我需要的,但我真的无法弄清楚我做错了什么。我又按了一遍程序,一步一步,但我没有看到缺陷。

任何帮助将不胜感激。如果我应该发布一些代码,我会很乐意这样做。

最好的祝愿, 麦田圈

稍后编辑:

现在我收到 417 HTTP 错误预期失败。我已经看到我应该将某个参数设置为 false,但这种解决方法仅适用于 .NET。有没有人知道Java中以下内容的对应者是什么?我真的很困惑。

     <system.net>
      <settings>
       <servicePointManager expect100Continue="false" />
      </settings>
     </system.net>

【问题讨论】:

标签: android google-app-engine http clojure


【解决方案1】:

这不是一个答案,但对于评论来说太长了,可能会有所帮助,所以这里......

首先,由于信息有限,很难判断这里发生了什么。尝试在客户端或服务器上发布更多日志记录。例如,转到服务器控制台并获取更多信息,或在客户端中添加调试。我首先尝试从调试/测试工具(如 hurl.it)进行 POST:http://www.hurl.it/(hurl 是名为 curl 的命令行 HTTP 客户端的一个不错的 Web 前端,如果您想要更高级的,请参阅 curl 本身窥视)。这样您就可以测试和探索并确保您的服务器端按照您对通用客户端的期望工作。然后构建其他客户端(如 Android)。

第二,“Apache-HttpClient/UNAVAILABLE”不是错误,它只是用户代理字符串——所以忽略那部分。 (UNAVAILABLE 是版本通常所在的位置,但某些 impl 有时似乎无法访问该版本。)

第三,405响应码是一个错误,这意味着在您尝试POST的服务器上不允许POST。这可能是因为在所述服务器上根本不允许 POST,或者您违反了某些安全策略(例如同源)。

如果是AppEngine,首先检查你正在使用的APP,确保它支持POST(在AppEngine寻找如何做POST的信息来解决,例如:google app engine: 405 method not allowed)。当您说您可以直接从“servlet”执行此操作时,您的意思是来自不同客户端的 POST 可以工作吗? (Servlet 是一种服务器端技术,所以这有点令人困惑。)如果是这样,请确保您的 Android 应用程序以相同的方式对同一主机执行客户端部分(多部分与 urlencoded 等)。

有关可能涉及的安全问题的更多信息,请参阅此帖子:Google App Engine + jQuery Ajax = 405 Method Not Allowed

【讨论】:

  • 感谢您的回答。我想我对我的问题的解释真的很糟糕,但它是这样的:当试图在数据库中添加对象时它可以工作(只要我直接在服务器上做,使用声明为 SomeClass scObject = new SomeClass(1, 2,3); (例如),但是当我试图从 android 界面实际获取我的对象时,我遇到了这些问题。我真的认为我必须审查我的整个策略。谢谢你的时间!
  • "Apache-HttpClient/UNAVAILABLE" is not an error 这就是我需要知道的全部内容。 +1
【解决方案2】:

我遇到了同样的问题,就我而言,这是由于服务器端区域没有写入权限而导致的错误。 我正在跟踪一个 android 测试以在文件上写入一个通过 POST 方法以异步方式传输的值。 Apache 收到了 POST 请求,但由于对文件的安全权限,无法将数据写入文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多