drm*_*wer 5 url android urlencode httpurlconnection
我正在使用PlaceAutocomplete一个地名,然后我将其编码并作为GET请求的一部分(在URL中)发送到远程主机.
在远程主机上,我发现某些用户设备正在发送被转义的单引号,这会导致问题,因为地名是作为URL的一部分发送的.
例如" Andy's Place"被发送为" Andy\'s Place"
\当部分URL出于显而易见的原因时,反斜杠是一个问题.
...但大多数情况下,这不会发生......例如,在我自己的测试设备上,它不会......这个地方被发送/接收为" Andy's Place".
我试图从头到尾经历链条,看看可能发生意外逃逸的地方.我试图总结下面的链,遗漏了一些东西(例如我不仅发送了placeName,我也发送了其他东西)...我希望我已经包含了所有重要的内容:
Place place = PlaceAutocomplete.getPlace(this, data);
String placeName = (String) place.getName();
EditText_placeName.setText(placeName);
// ... later ...
String newPlaceName = EditText_placeName.getText().toString();
String encodedPlaceName = Uri.encode(newPlaceName);
URL url = new URL(strBaseURL + '/' + encodedPlaceName);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
responseCode = connection.getResponseCode();
Run Code Online (Sandbox Code Playgroud)
上面的链中是否有任何东西可以在某些设备上的URL中引入不需要的转义字符而不是其他设备?
作为一种脚注,我知道通过POST(在正文中)而不是GET(作为URL的一部分)发送数据可能会更好(可能完全解决我的问题),事实上这就是我现在的情况走向,但我仍然想知道这个\角色是如何通过上述链条,至少部分是出于好奇.
好吧,我想通了,而"问题"实际发生后的处理在原来的职位中提到的链.我会详细说明实际发生的事情,以防它在这种情况下帮助其他人.
在\'实际上出现在该字符串正被记录在node.js的应用方法的结果.每当在node.js应用程序中发生超时时(仅偶尔发生,并且结果与\'问题无关),我停止处理,并返回错误.
出于诊断目的,我将导致超时的URL添加到Error对象(我自己创建或已存在的对象),以便我可以再次访问该URL以尝试重新创建问题并查看可能导致该问题的原因.超时.
所以类似于:
var err = new Error('oh dear');
err.recreate = theURLString; // the URL for the request that led to the problem
console.log(err);
Run Code Online (Sandbox Code Playgroud)
碰巧,我登录这个当err控制台(如上),这是在\'引入...即任何'字符theURLString出来的\'.
所以我想它必须是正在执行此操作.toString()的Error对象的实现.当我执行以下操作时:
console.log(JSON.stringify(err));
Run Code Online (Sandbox Code Playgroud)
...... \'序列没有出现.
甚至只是原始的URL字符串:
console.log(theURLString);
Run Code Online (Sandbox Code Playgroud)
所以,问题(例如它)只是在记录阶段,而不是之前.并且它不会发生在URL中的每个请求中',只是因为不是每个请求'都导致超时(通常问题只是资源过载).以前所有的东西只是让我偏离轨道.
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |