私は(私たち自身の)APIと通信するAndroidアプリケーションを開発しています。これは、リクエストメソッドPOSTを使用した操作リクエストと非操作リクエストGETでAPIを使用することを目的としていました(RESTfulアプリケーションの場合と同様)。
リクエストを認証またはパラメータを追加するために、HTTPリクエスト本文が使用されています(GETリクエストとPOSTリクエストの両方で)。(はい、HTTP定義ごとにGETリクエストにリクエストボディを追加することが可能であり、許可されています(たとえば、この投稿を参照))。投稿には通常、リクエスト本文を追加することは可能であると書かれていますが、サーバーはリクエスト中にそれを使用しない場合があります。
問題は、リクエストメソッドが常にPOSTに設定されていることです。接続構成中に、どこかでgetRequestMethod
GETに設定しても、を介してGETに設定した後にGETが返されても、マザーは発生しませんsetRequestMethod("GET")
。
AndroidアプリケーションはHttpsURLConnectionを使用します(これはHttpURLConnectionの拡張クラスであるため、同様に動作する必要があります)。
これらのメソッドを呼び出すことにより、リクエストボディに参加します。
https.setDoInput(true);
OutputStream os = https.getOutputStream();
os.write(outputInBytes);
os.close();
また、を呼び出すことhttps.setRequestMethod("GET")
により、リクエストメソッドをGETに設定する必要があります。
少し調べた後、行OutputStream os = https.getOutputStream();
はリクエストメソッドをPOSTに設定し、その後、もう一度GETに設定すると、接続が終了するまでGETのままになります(によって返されるhttps.getRequestMethod()
)
しかし、最終的にサーバーはリクエストメソッドPOSTでリクエストを受信します。
したがって、私の具体的な質問は次のとおりです。
現在、すべてのリクエストをPOSTに設定したばかりなので、問題はありません(このままにしておくのは問題ありませんが、いくつかの理由から、他に方法がないことを確認したいと思います。この問題を修正してください)
編集:getOutputStream()メソッドのドキュメントには次のように書かれています。
このメソッドが呼び出されると、デフォルトのリクエストメソッドは「POST」に変更されます。
デフォルトでHttpURLConnection
は、これはGETメソッドです(getDoInput()
デフォルトではtrue)。
使用setDoOutput(true)
するとPOSTメソッドになります。
別のメソッド(PUT、DELETEなど)が必要な場合は、setRequestMethod(string)を使用します。
そしてもちろん、あなたが前にあなたが望む方法を選択する必要がありますconnect()
方法
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加