2016-03-11 29 views
0

我想从服务器获取一些数据。主要问题是我没有服务器访问,但当然我知道请求的详细信息,我使用PostMan进行测试服务器调用,并且使用OkHttp在Android上实现它们。邮递员在OKHTTP上获得不同的结果

这里是我同时使用HttpURLConnection类或OkHttp从Android上侧服务器获取:

{ “收藏”:{ “版本”: “1.0”, “HREF”: “http://development.abc.com:80/”,“链接“:[{” HREF “:” #”, “相对”: “首部”, “提示”: “学生”},{ “HREF”: “#”, “相对”: “首部”, “提示”: “CFA”},{“href”:“注册”,“rel”:“header trial”,“prompt”:“免费试用”},{“href”:“about”,“rel”:“footer 侧边栏“,”提示“:”关于“},{”href“:”推荐“,”rel“:”footer sidebar“,”prompt“:”Testimonials“},{”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

使用拦截器(如Fiddler或Charles)调试HTTP调用。然后您可以比较两个请求是否相同。你可能不得不与服务员家伙交谈! –

+0

好吧,会尽力感谢。 –

+0

尝试使用此拦截器并查看正在运行的卷曲命令 https://github.com/mrmike/Ok2Curl –

回答

0

最后我想出了这个问题。

Acutally它是一个重定向问题,需要与服务器人谈谈。 我做什么,使其工作

  • 进行登录服务器的呼叫
  • 得到了饼干从服务器
  • 保存cookie的
  • 再次在头
  • 饼干一起做服务器调用

是的,这里是与邮递员相同的数据。

感谢每一个:)

相关问题