gpt4 book ai didi

java - 对包含 JSONArray 的 URL 进行编码

转载 作者:太空狗 更新时间:2023-10-29 16:25:09 30 4
gpt4 key购买 nike

我有一个 android 应用程序,我试图用它来使用 HTTPGet 将一些数据传递给 web 服务。如果我只是使用 JSONArray.toString() 方法构建字符串,我最终会得到一个类似于以下内容的 URL:

http://xxx.xx.xxx.xx/api?method=upload&args[deviceID]=123456789&args[data]=["{element1=93295352, element2=235235, element3=3523523}","{element1=93295352, element2=235235, element3=3523523}"]

由于 URL 中的空格和引号,这不起作用。如果我尝试执行以下操作:

JSONArray ja = new JSONArray();

// Add Data to JSONArray

String s = ja.toString();

// Add array to StringBuilder url

HTTPGet httpget = new HTTPGet(UrlEncoder.encode(url.toString()));

我收到一个错误抛出,因为整个 URL 被编码并以这样的方式结束:

http%3A%2F%2Fxxx.xx.xxx.xx%2Fapi%3Fmethod%3Dupload%26args%5BdeviceID%5D%3D123456879%26args%5Bdata%5D%3D%5B%22%7Belement1%3D915156028000%2C+element2%3D1651651%2C+element3%3D489461%7D%22%2C%22

显然,这不是我要找的,而且必须有比搜索/替换该 url 的 JSONArray 部分中的所有必要字符更好的解决方案,尽管我想这样做不会这是一个巨大的麻烦,因为我只担心引号和空格字符。

请注意,将其手动粘贴到我的浏览器中会返回我期望的结果:

http://xxx.xx.xxx.xx/api?method=upload&args[deviceID]=123456789&args[data]=[%22{element1=915156028000,%20element2=0.0,%20element3=2.297444}%22,%22{element1=915156055000,%20element2=0.0,%20element3=2.2974419999999998}%22]

最佳答案

您需要对查询参数 进行 URL 编码;例如

JSONArray ja = new JSONArray();

// Add Data to JSONArray

String s = UrlEncoder.encode(ja.toString());

// Add string to StringBuilder url

HTTPGet httpget = new HTTPGet(url.toString());

您需要注意的另一件事是 URL 的长度有实际限制。这些限制因一种实现而异(浏览器、服务器、代理、HTTP 客户端库等)。在某些情况下,它低至 2k 字节,IIRC。

跟进

If I want to do the same thing using POST instead, do I end up having to encode the data in the same manner?

这取决于。

  • 如果您使用 POST 将参数作为 URL 查询参数发送,则将应用相同的编码规则和限制。作为记录,URL 编码规则是 URL 的一部分。和 URI规范。
  • 如果您使用“application/x-www-form-urlencoded”内容类型将参数作为 POST 数据发送,则编码规则会有些不同;查看HTML spec . (主要区别在于此编码将空格编码为 + 字符。)
  • 您也可以用其他方式对 POST 数据进行编码,前提是 HTTP 客户端和服务器都理解编码和内容类型。

当然,使用 POST 数据的优点之一是您可以发送的参数的大小通常没有限制。

关于java - 对包含 JSONArray 的 URL 进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3792124/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com