が含まれていました。カールと同じようにREST APIを呼び出す単純なJavaコードを記述していました。 curlコマンドは、ログインエンドポイントにPOSTリクエストを送信します。アプリケーション用のコンテンツタイプには、文字セット
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{
"username": "MicroStrategy",
"password": "MyPassword",
"loginMode": 1
}' 'https://env-792.customer.cloud.microstrategy.com/MicroStrategyLibrary/api/auth/login'
これが成功した場合、あなたは204 HTTPレスポンスコードとHTTPヘッダーとしてトークンを取り戻します。
次のコードでは、同じ結果が得られず、代わりにHTTP 200とトークンとボディがありませんでした。私が間違ってやっていたかを理解しようとする過程で
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"username\": \"MicroStrategy\", \"password\": \"MyPassword\", \"loginMode\": 1}");
Request urlrequest = new Request.Builder()
.url("https://env-792.customer.cloud.microstrategy.com/MicroStrategyLibrary/api/auth/login")
.addHeader("accept", "application/json")
.post(body)
.build();
OkHttpClient client = new OkHttpClient();
Response urlresponse = client.newCall(urlrequest).execute();
、私はリバースプロキシを介して要求を実行しました(私は「チャールズ」を使用)とokhttp3によって設定されたコンテンツタイプが用文字セットを含めたことに気づきましたアプリケーション/ JSON:
POST /MicroStrategyLibrary/api/auth/login HTTP/1.1
accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 63
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.8.0
Host: env-792.customer.cloud.microstrategy.com
{"username": "MicroStrategy", "password": "MyPassword", "loginMode": 1}
私はマッチングカール文はまた
curl -X POST --header 'Content-Type: application/json; charset=utf-8' --header 'Accept: application/json' -d '{
"username": "MicroStrategy",
"password": "MyPassword",
"loginMode": 1
}' 'https://env-792.customer.cloud.microstrategy.com/MicroStrategyLibrary/api/auth/login'
を失敗したことを確認し、これは既知の問題ですか? (コンテンツタイプのRFCがtext/* content-typesの文字セットのみを許可していますが、私はその分野の専門家ではありません!)
削除するContent-Typeを上書きするにはどうすればよいですか文字セット部分?
私は'byte()'入力を使って 'create()'を使うことを確認してください。回避策を使用するのは嫌いですが、これで十分です。 :) –