我有一个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
显然,这不是我正在寻找的,并且必须有一个更好的解决方案,而不是搜索/替换该网址的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]
答案 0 :(得分:6)
您需要URL 查询参数 value ;例如
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。
关注
如果我想使用POST做同样的事情,我是否最终必须以相同的方式对数据进行编码?
这取决于。
+
个字符。)当然,使用POST数据的一个优点是,您可以发送的参数大小通常没有限制。