Java - 如何通过 HttpUrlConnection 发送表单数据或 www-form-urlencoded 数据

标签 java post httpurlconnection arcgis

我正在尝试使用仅支持通过 form-data 或 www-form-urlencoded 属性传递 JSON 数据的 REST API。所以,我的问题是,如何使用 HttpUrlConnection 附加多个表单数据项?当我通过浏览器使用 API 时,Chrome 中的请求如下所示:

Form Data
adds:
updates: [{"attributes":{"OBJECTID":2241,"OTHER_FIELD":"500"}}]
deletes:
gdbVersion:
rollbackOnFailure:
f: pjson

但我不知道如何在 Java 中复制它。

这是我到目前为止尝试过的:

    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    urlConnection.setUseCaches(false);
    urlConnection.setDoOutput(true);
    urlConnection.setRequestMethod("POST");
    urlConnection.addRequestProperty("f", "json");
    urlConnection.addRequestProperty("adds", null);
    urlConnection.addRequestProperty("updates", "[{\"attributes\":{\"OBJECTID\":2241,\"OTHER_FIELD\":\"500\"}}]");
    urlConnection.addRequestProperty("deletes", null);
    urlConnection.addRequestProperty("rollbackOnFailure", "true");
    urlConnection.addRequestProperty("gdbVersion", null);

但它没有按应有的方式附加数据...

对于那些感兴趣的人,我正在尝试连接到 ArcGIS 要素服务 API,以便我可以添加、更新或删除要素,但这里我使用的是 ApplyEdits

最佳答案

所以我想出了解决办法,这里是解决方案:

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setRequestMethod("POST");

首先将请求设置为POST请求,然后会有一些输出

StringBuilder encodedUrl = new StringBuilder("adds=" + URLEncoder.encode("[{\"attributes\":{\"OBJECTID\":2241,\"MAXIMOID_PRE\":\"HYD\"}}]", "UTF-8"));
encodedUrl.append("&updates=" + URLEncoder.encode("", "UTF-8"));
encodedUrl.append("&deletes=" + URLEncoder.encode("", "UTF-8"));
encodedUrl.append("&f=" + URLEncoder.encode("json", "UTF-8"));
encodedUrl.append("&rollbackOnFailure=" + URLEncoder.encode("true", "UTF-8"));
encodedUrl.append("&gdbVersion=" + URLEncoder.encode("", "UTF-8"));

这就是每个表单数据值的设置方式。每个键值只是一个 java 字符串,然后使用 URLEncoder.encode 对该值进行编码。使用这个包含所有表单数据元素的字符串,然后我们将其写入输出流:

final BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream()));
bfw.write(encodedUrl);
bfw.flush();
bfw.close();

然后可以接收并解析响应。

关于Java - 如何通过 HttpUrlConnection 发送表单数据或 www-form-urlencoded 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40666707/

相关文章:

java - 查找 App Engine 数据存储区列中的最大值

javascript - 使用 JS 或 jQuery 处理表单提交时的 500 错误?

jquery - 如何从 Web Api .Net 中的 AuthorizeAttribute 检索 POST 参数?

ios - 如何使用 JSON 格式解析通过 AFNetworking 1.0 获得的响应

java - HttpURLConnection.getResponseCode() 在代码已知时抛出 IOException

java ; HttpURL连接;查询项重复为 `paramName=value, value` 。预计为 `paramName=value`

Android HTTPUrlConnection : how to set post data in http body?

java - 如何获取为其 ReST API 返回的响应的 Openstack json 架构?

java - 在 java 中将 double 转换为字符串以用于 netbeans gui

java - 如何使用 libgdx 仅触摸屏幕左侧时创建监听器