【问题标题】:cURL and HttpURLConnection - Post JSON DatacURL 和 HttpURLConnection - 发布 JSON 数据
【发布时间】:2012-03-26 06:15:14
【问题描述】:

如何使用 HttpURLConnection 发布 JSON 数据?我正在尝试这个:

HttpURLConnection httpcon = (HttpURLConnection) ((new URL("a url").openConnection()));
httpcon.setDoOutput(true);
httpcon.setRequestProperty("Content-Type", "application/json");
httpcon.setRequestProperty("Accept", "application/json");
httpcon.setRequestMethod("POST");
httpcon.connect();

StringReader reader = new StringReader("{'value': 7.5}");
OutputStream os = httpcon.getOutputStream();

char[] buffer = new char[4096];
int bytes_read;    
while((bytes_read = reader.read(buffer)) != -1) {
    os.write(buffer, 0, bytes_read);// I am getting compilation error here
}
os.close();

我在第 14 行遇到编译错误。

cURL 请求是:

curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-d "{'value': 7.5}" \
"a URL"

这是处理 cURL 请求的方式吗?任何信息都会对我很有帮助。

谢谢。

【问题讨论】:

  • 你应该发布编译错误

标签: java json post curl httpurlconnection


【解决方案1】:

OutputStream 期望使用字节,并且您正在向它传递字符。试试这个:

HttpURLConnection httpcon = (HttpURLConnection) ((new URL("a url").openConnection()));
httpcon.setDoOutput(true);
httpcon.setRequestProperty("Content-Type", "application/json");
httpcon.setRequestProperty("Accept", "application/json");
httpcon.setRequestMethod("POST");
httpcon.connect();

byte[] outputBytes = "{'value': 7.5}".getBytes("UTF-8");
OutputStream os = httpcon.getOutputStream();
os.write(outputBytes);

os.close();

【讨论】:

  • 这种方式不能发送复杂的json对象吗?例如... "{"points":[{"point":{"latitude":40.8195085182092,"longitude":-73.75127574479318},"description":"test"},{"point":{"latitude" :40.2195085182092,"longitude":-74.75127574479318},"description":"test2"}],"mode":"WALKING"}" ... 是我通过这种方法发送的一个对象,我得到一个 HTTP 响应代码 500。
  • @CrowMagnumb 您应该发布一个单独的问题。 500 表示服务器在尝试处理您的请求时出现内部错误。
  • 好的,我已经这样做了here谢谢你的建议。
【解决方案2】:

您可能想要使用 OutputStreamWriter 类。

final String toWriteOut = "{'value': 7.5}";
final OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream());
osw.write(toWriteOut);
osw.close();

【讨论】:

  • OutputStream 有什么好处?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 2015-05-05
  • 1970-01-01
相关资源
最近更新 更多