【问题标题】:post request to Mongohq from Appengine从 Appengine 向 Mongohq 发布请求
【发布时间】:2013-09-20 21:46:15
【问题描述】:

我正在尝试使用 rest api 从我的 AppEngine 向 mongohq 服务器发送 post 请求。

我使用这个代码:

public static void post(String id, String context)
{
  String urlString = "https://api.mongohq.com/databases/db/collections/collection/documents?_apikey=XXXXXXXXXX";
  String data = "{\"document\" : {\"_id\": \"" + id+ "\", \"context\":" + context +"}}";
  try
  {
    URL url = new URL(urlString);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setInstanceFollowRedirects(false);
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/json");
    connection.setRequestProperty("charset", "utf-8");
    connection.setRequestProperty("Content-Length", "" + Integer.toString(data.getBytes().length));
    connection.setUseCaches(false);

    DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
    wr.writeBytes(data);
    wr.flush();
    wr.close();
    System.out.println(connection.getResponseMessage());
    connection.disconnect();
  }
  catch (Exception e)
  {
      System.out.println("postToMongo: "+ e);     
  }
}

它在 Appengine 外部工作得很好,但是当我在 Appengine 内部做同样的事情时,没有任何东西发送到 mongodb。

该函数在 Appengine 外部和内部都打印OK,但只有当我在 Appengine 外部使用此函数时,数据才会出现在 db 中。

此外,一个简单的 jave get 函数可以在 Appengine 的外部和内部工作。

谁能帮我解决这个问题? 我正在寻找一种从 Appengine 内部发布到 Mongohq 的方法。

谢谢

【问题讨论】:

  • 尽量不要设置 Content-Length 标头,因为它是由 GAE 自动设置的:developers.google.com/appengine/docs/java/urlfetch/…
  • 还可以尝试使用OutputStreamWriter 而不是DataOutputStream ,如示例所示:developers.google.com/appengine/docs/java/urlfetch/…
  • @PeterKnego,我改变了。我还是有同样的问题...
  • 所以看起来 POST 实际上已经到达目的地(因为你得到了响应),但是数据在另一边没有被正确解析。需要注意两点:如前所述,不要使用DataOutputStream,因为这是将Java 类型写入输出流。其次,GAE 的默认编码是 US-ASCII,所以你必须显式转换为 UTF-8。

标签: java google-app-engine mongodb post mongohq


【解决方案1】:

试试这个:

 OutputStreamWriter writer;
 writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
 writer.write(message);
 writer.close();

【讨论】:

    猜你喜欢
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2017-12-03
    • 2019-10-22
    • 1970-01-01
    • 2023-02-13
    相关资源
    最近更新 更多