我正在編寫一段簡單的Java代碼,它調用一個REST API來模仿我用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的內容類型只允許字符集的文本/ *內容類型,但我不是那方面的專家!)
我該怎麼做才能覆蓋內容類型以刪除charset部分?
我確認使用帶'byte []'輸入的'create()'工作。我不喜歡使用解決方法,但在這一點上對我來說已經足夠了! :) –