1

Grails-Applicationのテストを書いていますが、アプリケーションに「バグ」が見つかりました。少なくとも、それは私のアプリケーションだと思います。

私のリクエストは次のようになります:

http://maps.googleapis.com/maps/api/geocode/json?address=Karlsruhe+76131+Tullastraße+17&sensor=false

そして、応答には私の州/州が含まれています(正確な翻訳はわかりません-私はドイツ出身で、「Bundesland」と呼ばれる16の小さな「州」に分割されています)

私の州は「バーデン・ヴュルテンベルク」と呼ばれ、ブラウザからの応答にあります。

私のアプリケーションでは、URLとBufferedReader(InputStreamReaderを使用)を使用して応答を取得しています。

ブラウザからの応答は、コードのURL-Connectionから取得した応答と等しいと断言しようとしています。

しかし-ここに質問/問題があります-それらは異なります。そして、私が見つけた唯一の違いは、私の州の名前にありました。

前に述べたように、ブラウザーから取得した応答には「バーデンヴュルテンベルク」が含まれていますが、コードから取得した応答には「バーデンヴュルテンベルク」のみが含まれています。つまり、üは通常のuに切り替えられます。

これが私のコードです:

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に渡すオプションが表示されました。UTF-8であると予想されるため、この文字セットを使用していますが、このバグは解決されていません。

なぜこれが可能なのか混乱しています。

どこを見ればいいですか?私はそれほど経験がないので、かなり無知です

編集:もう少しテストしました。umlautを含む通りで検索した場合(「Bärenweg」または「Baerenweg」が例です)、両方の応答(コードとブラウザー)に正しい値Bärenwegが含まれています。これは状態だけが影響を受けているようです。

すぐにグーグルに連絡する必要がありますか?この新しいテストでは、それについて何かできるかどうかはよくわかりません。

4

2 に答える 2

4

問題は解決しました。私は私の同僚に尋ねました、そして彼は唯一の合理的な原因は異なるリクエストヘッダーであるかもしれないと提案しました。

私がすぐに考えることができる唯一の方法は、wiresharkでそれを行うことでした。だから私はそれをダウンロードしてインストールし(WinPCabがインストールされています)、インストール後に起動します。

まず、FirefoxでF5キーを押し、Grailsでテストを実行して、両方のリクエストをトリガーしました

次に、フィルター「http.response」を追加しました(HTTPリクエストからのすべての応答が表示される必要があることを意味します)。Response-Headersはほぼ同等であり、明らかな間違いは発生しませんでした。

次に、「http.request」でフィルタリングして、google-apiに送信されたヘッダーを比較しましたが、応答にはもう少しずれがありました。

まず、Accept-Propertyを比較し、コードのプロパティをBrowser-Responseの値(正常に機能するもの)に設定しました。問題を解決しませんでした。

したがって、次のプロパティ:Accept-Language。

コードのRequest-headerにはこのプロパティがまったくなかったので、Browser-Request-headerと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");

TL;DR/ロングストーリーショート

request-headerでlanguage-propertyを設定すると、Googleは応答がどの言語であるかを認識します。

于 2012-06-01T11:44:54.497 に答える
0

URLのクエリ文字列はURLエンコードされている必要があるためß、エスケープシーケンスに変換されます。URLEncoder.encode("?...", "UTF-8")

于 2012-06-01T09:29:35.423 に答える