我正在为我的Grails编写测试--应用程序,我在应用程序中发现了一个"bug“--至少我认为这是我的应用程序。
我的请求如下:
http://maps.googleapis.com/maps/api/geocode/json?address=Karlsruhe+76131+Tullastraße+17&sensor=false答复中包含了我的州/省(我不知道确切的翻译-我来自德国,被划分为16个较小的“州”-称为“德国”)
我的状态名为“Badenürttemberg”,这是浏览器的响应。
在我的应用程序中,我使用一个URL和一个BufferedReader (带有一个InputStreamReader)来获得响应。
我试图断言,来自浏览器的响应等于我从代码中的URL连接获得的响应。
但是--这是一个问题/问题--它们不一样。我发现的唯一不同就是我的状态。
正如前面提到的,我从浏览器获得的响应包含"Baden-Württemberg",但是我通过代码获得的响应只包含"Baden-Wurttemberg“--用普通u切换了üis。
这是我的密码:
URLConnection connection = new URL(url).openConnection()
BufferedReader br = new BufferedReader(new InputStreamReader(connection.content, "UTF-8" ))
StringBuffer connectionResponse = new StringBuffer()
while (br.ready()) {
connectionResponse.append(br.readLine())
}
br.close()
return connectionResponse.toString()我的搜索引导我选择将一个字符集传递给InputStreamReader -正如我所预期的那样,我使用了这个字符集,但它并没有解决这个问题。
我只是搞不懂为什么这是可能的。
我该去哪看看?我没那么有经验,所以我很无知
编辑:我测试了更多,如果我搜索的街道上包含一个umlaut (“B renweg”或"Baerenweg“将是一个例子),两个响应(代码和浏览器)都包含正确的值:B renweg。似乎只有国家才会受此影响。
我应该马上联系谷歌吗?有了这个新的测试,我不太确定我是否能做些什么
发布于 2012-06-01 11:44:54
问题解决了。我问了我的一位同事,他建议,唯一合理的原因可能是不同的请求头。
我能马上想到的唯一方法就是用威雷沙克来做这件事。因此,我下载并安装了它(与它一起安装的WinPCab),并在安装后对其进行了优化。
首先,我在Firefox中按F5并在Grails中运行测试,从而触发了这两个请求。
然后我添加了过滤器"http.response“(这意味着来自http.response的所有响应都应该是可见的)。响应头几乎相等,并且没有发生任何明显的错误。
然后,我筛选了"http.request“来比较发送到google的头文件,还有更多的内容,然后是响应。
首先,我比较了Accept-属性,并将代码中的属性设置为Browser-Response的值(这个值运行得很好)。没能解决问题。
接下来的属性是:接受语言。
在代码的请求头中,这个属性根本不存在,所以我从浏览器请求头和kazaam复制了它:它可以工作!
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3若要在连接上设置此属性,请添加以下代码:
connection.setRequestProperty("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");博士/长话短说
在请求头中设置语言属性,google就知道您希望响应使用哪种语言。
发布于 2012-06-01 09:29:35
URL的查询字符串应该是URL编码的,因此ß被转换成转义序列。URLEncoder.encode("?...", "UTF-8")。
https://stackoverflow.com/questions/10842189
复制相似问题