Я хочу сделать запрос к API моей организации. Запрос содержит заголовки, имя пользователя, пароль и файл cookie для управления сеансом.
Ниже приведен фактический код (в HttpClient), который я хочу переписать с помощью Retrofit. Я слышал, что библиотеки HttpClient устарели или что-то в этом роде, поэтому я выбрал Retrofit. Я ожидаю ответа с кодом состояния 200.
public static CookieStore cookingStore = new BasicCookieStore();
public static HttpContext context = new BasicHttpContext();
public String getAuth(String login,String password) {
String resp = null;
try {
String url = DOMAIN+"myxyzapi/myanything";
context.setAttribute(HttpClientContext.COOKIE_STORE, cookingStore);
HttpClient client = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(url);
String log = URLEncoder.encode(login, "UTF-8");
String pass = URLEncoder.encode(password, "UTF-8");
String json = "username = "+log+"&password = "+pass+"&maintain=true&finish=Go";
StringEntity entity = new StringEntity(json);
post.setEntity(entity);
post.addHeader("Content-Type", "application/x-www-form-urlencoded");
HttpResponse response = client.execute(post,context);
resp = EntityUtils.toString(response.getEntity());
accountPoller();
} catch(Exception a) {
log.info("Exception in authentication api:"+a.getMessage().toString());
}
return resp;
}
Ниже мой код, где я не могу понять, как передать контекст с запрос. HttpResponse response = client.execute(post,**context**); с помощью дооснащения.
Я даже не знаю, правильно ли я сделал свой запрос на модернизацию.
try {
String log = URLEncoder.encode(login, "UTF-8");
String pass = URLEncoder.encode(password, "UTF-8");
RequestBody formBody = new FormBody.Builder()
.add("username = ", xyz)
.add("password = ", mypass)
.add("&maintain = ", "true")
.add("finish = ", "Go")
.build();
String url = www.xyz.com+"myxyzapi/myanything";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).post(formBody).addHeader("Content-Type", "application/x-www-form-urlencoded").build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
final String myresp = response.body().string();
}
}
});
} catch(Exception a) {
a.getMessage();
}




Вы должны поймать исключение и использовать этот класс. модификация2.HttpException
модернизация2 Класс HttpException
инт код() Код состояния HTTP. Нить сообщение() Сообщение о статусе HTTP. Ответ отклик() Полный ответ HTTP.
проблема в том, что он не возвращает код успеха 200. Можете ли вы помочь мне достичь этого.
вы должны отправить мне полный код с учетными данными. Если вы можете сделать это в почтальоне и отправить мне скриншот всего, что добавлено в запрос. Я могу преобразовать его в ретрофит.
спасибо за своевременные ответы. В любом случае сейчас проблема решена. Просто сделал несколько глупых ошибок.
Пожалуйста, избегайте чрезмерно описательных заголовков. Редактирование вашего заголовка было в порядке: вместо этого второе предложение должно быть добавлено как часть вашего вопроса. Общее эмпирическое правило заключается в том, что если ваш заголовок нужно разбить на два или более предложений, он слишком длинный.