2017-02-18 8 views
1

私はstackoverflowからすべての質問を行ってきましたが、それらは私の問題には適用されません。POSTMAN APIはうまく動作しましたが、私のJavaコードからは試しましたか?

enter image description here 画像リクエストは、POSTMANからうまく動作してください。

しかし、私はandroidコードから試してみるとうまくいきません。 サンプルAndroidコードがあります。

@Override 
     protected String doInBackground(Void... params) { 
      HttpURLConnection urlConnection = null; 
      BufferedReader reader = null; 

      // Will contain the raw JSON response as a string. 
      String forecastJsonStr = null; 

      try { 
       URL url = new URL("sample url"); 

       String postData = "key1=valu1&key2=valu2"; 

       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setReadTimeout(55000 /* milliseconds */); 
       conn.setConnectTimeout(55000 /* milliseconds */); 
       conn.setRequestMethod("POST"); 
       conn.setDoInput(true); 
       conn.setDoOutput(true); 
       OutputStream os = conn.getOutputStream(); 
       BufferedWriter writer = new BufferedWriter(
         new OutputStreamWriter(os)); 
       writer.write(postData); 

       writer.flush(); 
       writer.close(); 
       os.close(); 

       int responseCode=conn.getResponseCode(); 

       if (responseCode == HttpsURLConnection.HTTP_OK) { 

        BufferedReader in=new BufferedReader(
          new InputStreamReader(
            conn.getInputStream())); 
        StringBuffer sb = new StringBuffer(""); 
        String line=""; 

        while((line = in.readLine()) != null) { 
         Log.e("response ",line); 
         sb.append(line); 
         break; 
        } 

        in.close(); 
        return sb.toString(); 

       } 
       else { 
        return new String("false : "+responseCode); 
       } 
      } catch (Exception e) { 
       Log.e("PlaceholderFragment", "Error ", e); 
       // If the code didn't successfully get the weather data, there's no point in attemping 
       // to parse it. 
       return null; 
      } finally { 
       if (urlConnection != null) { 
        urlConnection.disconnect(); 
       } 
       if (reader != null) { 
        try { 
         reader.close(); 
        } catch (final IOException e) { 

        } 
       } 
      } 
     } 

上記のコードは405エラーコードを返します。私もOkHttpから試しました。 助けてください。

答えて

1

URLの末尾に「/」を付けると、サーバーで「/」で終わるURLが好きなのでリダイレクトが発生します。 POSTはサーバーがリダイレクトするURLによって完全にサポートされていますが、クライアントはsetRedirecting()呼び出しに応じて動作するときにGET要求を実行しています(cURLは-Lスイッチでも同じことを行います) URLの最後に '/'を付けるか、自分自身でLocationヘッダーを取得して、別のPOST要求を手動で開始します。

これはwiresharkで見ることができます。ブラウザにURLにスラッシュを付けてGETリクエストを実行しようとすると、理論をテストできます。

here.

からの続きを読む:それは、ブラウザがここで405はこのコードはURL(ない生産準備)に「/」を追加する簡単な修正を使用して、Android用固定コードです取得させますこのことができますなら、私に知らせて:)

また、コードのこの部分を使用してみてくださいください:

public void postData() { 
// Create a new HttpClient and Post Header 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("https://your URL"); 

try { 
    // Add your data 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
    nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
    nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi")); 
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

    // Execute HTTP Post Request 
    HttpResponse response = httpclient.execute(httppost); 

} catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
} 
} 
+1

以下に示すように、データがURLと一緒に送信する必要がありますので、私はここに質問を入れる前に試みたが、私のためのJavaコード –

+1

Iも使用POSTMANを働いていない、あなたは別のURLを使用してみましたか? –

+0

を生成 – Han

0

あなたのAPIコールは、GETパラメータのデータをrecivevingています。

  String postData = Uri.encode("key1=valu1&key2=valu2"); 
      URL url = new URL("sample url"+"?+postData); 
関連する問題