2016-03-11 2 views
0

Я пытаюсь получить некоторые данные с сервера. основная проблема заключается в том, что у меня нет доступа к серверу, но, конечно же, я знаю детали запроса, я использую 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.

Спасибо.

+1

Отладка HTTP-вызовов с использованием перехватчика, такого как Fiddler или Charles. Затем вы можете сравнить, совпадают ли эти два запроса или нет. Возможно, вам придется поговорить с ребятами сервера! –

+0

ладно, попробуй спасибо большое. –

+0

Попробуйте использовать этот перехватчик и посмотрите, какая команда curl запущена https://github.com/mrmike/Ok2Curl –

ответ

0

Наконец-то я понял проблему с этим.

Acutally его проблема перенаправления, необходимо поговорить с ребятами сервера. Что я могу сделать, чтобы сделать его работу является

  • сделать вызов Логин сервера
  • получил печенье с сервера
  • сохранить печенье
  • снова сделал запрос на сервер вместе с куки в заголовке

и да, это те же данные, что и почтальон.

Thanks Every one :)

Смежные вопросы