2017-04-15 11 views
0

私は長いOpenStreetMaps overpass api urlリクエストを渡す必要があります。 GETリクエストには長すぎるので、POSTリクエストを使用することに決めました。残念ながら、RequestMethodを変更すると、400のエラーコードで解決されます(GETメソッドと同じクエリでは200コードになります)。ここでAndroid HttpURLConnection POST RequestMethodの結果が400エラーコード

私のHttpURLConnectionのコードは次のとおりです。

public String downloadUrl(String strUrl) throws IOException { 
    String data = ""; 
    InputStream iStream = null; 
    HttpURLConnection urlConnection = null; 
    try{ 
     URL url = new URL(strUrl); 

     // Creating an http connection to communicate with url 
     urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.setRequestMethod("POST"); 
     Log.wtf("JSON","connection started..."); 
     // Connecting to url 

     urlConnection.setRequestProperty("Content-Type", "application/json"); 

     urlConnection.connect(); 
     Log.wtf("KOD",Integer.toString(urlConnection.getResponseCode())); 
     // Reading data from url 
     iStream = new BufferedInputStream(urlConnection.getInputStream()); 
     BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); 
     StringBuilder sb = new StringBuilder(); 
     String line = ""; 
     while((line = br.readLine()) != null){ 
      sb.append(line); 
     } 
     data = sb.toString(); 
     br.close(); 

    }catch(Exception e){ 
     Log.wtf("ExceptionWhileUrlDownload", e.toString()); 
    }finally{ 
     iStream.close(); 
     urlConnection.disconnect(); 
    } 
    return data; 
} 
+0

通常の方法でPOSTする必要があります。代わりに、アプリケーション/ jsonにします。それは間違っていた。さらに、あなたはデータを投稿していません。出力ストリームにデータを書き込んでいません。 – greenapps

+0

'downloadUrl()'あなたは何をダウンロードしようと思っていますか? – greenapps

+0

私はapplication/json行を削除しましたが、それは役に立ちませんでした。私はJson OSMのレスポンスをダウンロードしようとしています。 GETメソッドでは、全体のクエリがstrUrlになっていましたが、ほとんどの場合クエリが長くなりました。 URLのクエリは次のようになります:http://overpass-api.de/api/interpreter?data=[out:json] KamCho

答えて

1

アプリケーションを削除する/ json

URLからクエリを削除します。そのクエリ文字列を出力ストリームに書き込みます。その後、入力ストリームから読み取ることができます

0

HTTPエラー400不正な要求エラーです。あなたが間違ったリクエストを送信していることを意味します。 GETを使用してHTTP 200とPOSTを使用してHTTP 400を取得すると、呼び出しているHTTPメソッドはPOSTでなくGETになります。したがって、POSTリクエストをGETメソッドに送ることはできません。

+0

ありがとうございました。これによると:http://overpass-api.de/command_line.html OSM overpass apiは、GETメソッドとPOSTメソッドの両方をサポートしています。それにもかかわらず、もし私のコードがOKなら、それは真実ではないかもしれません... – KamCho

+0

悪い要求はjsonのアプローチによってのみ引き起こされます。それはPOSTのためではありません。 POSTは可能ですが、正しい方法で実行する必要があります。 – greenapps

関連する問題