Я пытаюсь получить некоторые данные с сервера. основная проблема заключается в том, что у меня нет доступа к серверу, но, конечно же, я знаю детали запроса, я использую PostMan для вызовов сервера тестирования и, чем реализую их на Android, используя OkHttp.Получение другого результата на OKHTTP от почтальона
Вот что я получаю от сервера на андроид стороне, используя как HttpURLConnection или OkHttp:
{ "Коллекция": { "версия": "1,0", "HREF": "http://development.abc.com:80/", "ссылки ": [{" HREF ":" #», "отн": "заголовок", "подсказка": "Студенты"}, { "HREF": "#", "отн": "заголовок", "подсказка": «CFA»}, {«href»: «signup», «rel»: «header trial», «prompt»: «Бесплатная пробная версия»}, {"href": "about", "rel": "footer sidebar "," prompt ":" About "}, {" href ":" отзывы "," rel ":" footer sidebar "," prompt ":" Отзывы "}, {" href ":" contact "," rel ":" footer "," prompt ":" Contact "}, {" href ":" faq "," rel ":" footer sidebar "," prompt ":" FAQs}}, {"href": " авторизоваться" "Отн": "логин", "приглашение": "Войти"}], .......
Я использую те же заголовки с обеих сторон, т.е.
("accept", "application/vnd.collection+json")
("authorization", "Basic secret==")
и используя те же учетные данные для тестового входа:
как ни странно, тот же самый вызов сервера дает ниже данных в почтальон
{ "коллекция": { "версия": "1,0", "HREF": "http://development.abc.com:80/ch/re/videos " "ссылки": [{ "HREF": "http://development.abc.com:80/ch/re/vr", "отн": "меню vrated", "приглашение": "V оценку"}, { "HREF": "http://development.abc.com:80/user/watcr"," отн ": "меню watchlater", "подсказка": "Посмотреть позже"} ...
Вот мой код:
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
OkHttpClient client =new OkHttpClient.Builder()
.cookieJar(new CookieJar() {
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.put(url, cookies);
cookie=cookies.get(0).toString();
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url);
return cookies != null ? cookies : new ArrayList<Cookie>();
}
})
.build();
Request request = new Request.Builder()
.url("http://development.abc.com/login")
.post(body)
.addHeader("accept", "application/vnd.collection+json")
.addHeader("authorization", "Basic secret==")
.addHeader("cache-control", "no-cache")
.addHeader("Cookie",cookie)
.addHeader("content-type", "application/x-www-form-urlencoded")
.build();
Response response = null;
try
{
response=client.newCall(request).execute();
String str=response.body().string();
} catch (Exception e) {
e.printStackTrace();
}
Как и тот же вызов сервера возвращаются разные результаты.
Я проверил от «results from Curl is different than results from Postman», что также нужно добавить user agent
в заголовок, поэтому я также попробовал это, но не повезло.
Еще одна вещь, что если я использую неправильные учетные данные (т. Е. Тело: адрес электронной почты, пароль) для этого вызова, я получаю такую же ошибку как для Okhttp, так и для PostMan.
Спасибо.
Отладка HTTP-вызовов с использованием перехватчика, такого как Fiddler или Charles. Затем вы можете сравнить, совпадают ли эти два запроса или нет. Возможно, вам придется поговорить с ребятами сервера! –
ладно, попробуй спасибо большое. –
Попробуйте использовать этот перехватчик и посмотрите, какая команда curl запущена https://github.com/mrmike/Ok2Curl –