저는 curl을 사용하여 만든 것과 비슷한 모방을하기 위해 REST API를 호출하는 간단한 Java 코드를 작성했습니다. 컬 명령은 로그인 엔드 포인트에 POST 요청을 보냅니다 :응용 프로그램의 내용 유형에 charset이 포함되어 있습니다.
이 성공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에 대해서만 charset을 허용한다는 것을 알고 있지만이 분야에 대한 전문가는 아닙니다!)
제거 할 Content-Type을 덮어 쓰려면 어떻게해야합니까? charset 부분?
I 'byte()'입력으로'create()'를 사용했는지 확인하십시오. 해결 방법을 사용하는 것을 싫어하지만이 시점에서 충분합니다. :) –