Java 从邮递员那里得到关于OKHTTP的不同结果

Java 从邮递员那里得到关于OKHTTP的不同结果,java,android,postman,okhttp3,Java,Android,Postman,Okhttp3,我正在尝试从服务器获取一些数据。主要的问题是我没有服务器访问权限,但是我当然知道请求的详细信息,我使用PostMan来测试服务器调用,而不是使用OkHttp在android上实现它们 以下是我使用HttpUrlConnection或OkHttp从android端的服务器获得的信息: {“集合”:{“版本”:“1.0”,“href”:“,“链接”:[{“href”:“#”,“rel”:“标题”,“提示”:“学生”},{“href”:“#”,“rel”:“标题”,“提示”:“CFAs”},{“hre

我正在尝试从服务器获取一些数据。主要的问题是我没有服务器访问权限,但是我当然知道请求的详细信息,我使用PostMan来测试服务器调用,而不是使用OkHttp在android上实现它们

以下是我使用HttpUrlConnection或OkHttp从android端的服务器获得的信息:

{“集合”:{“版本”:“1.0”,“href”:“,“链接”:[{“href”:“#”,“rel”:“标题”,“提示”:“学生”},{“href”:“#”,“rel”:“标题”,“提示”:“CFAs”},{“href”:“注册”,“rel”:“标题” 试用版“,”提示“:”免费试用版“},{”href“:”关于“,”rel“:”页脚 边栏“,”提示“:”关于“},{”href“:”推荐信“,”rel“:”页脚 边栏“,”提示“:”推荐“},{”href“:”联系人“,”rel“:”页脚“,”提示“:”联系人“},{”href“:”常见问题“,”rel“:”页脚 边栏,“提示”:“常见问题解答”},{“href”:“登录”,“rel”:“登录”,“提示”:“登录”}]

我在两侧使用相同的标题,即

("accept", "application/vnd.collection+json")
("authorization", "Basic secret==")
并使用相同的凭据进行测试登录:

奇怪的是,相同的服务器调用在PostMan中给出了以下数据

{“集合”:{“版本”:“1.0”,“href”: "", “链接”:[{“href”: "", “rel”:“菜单已设置”、“提示”:“V额定”},{“href”: “”和“rel”:“菜单 watchlater“,”提示符“:“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();
            }
CookieManager CookieManager=新建CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
OkHttpClient客户端=新建OkHttpClient.Builder()
.cookieJar(新的cookieJar(){
@凌驾
public void saveFromResponse(HttpUrl、列表cookie){
cookieStore.put(url,cookies);
cookie=cookies.get(0.toString();
}
@凌驾
公共列表loadForRequest(HttpUrl url){
List cookies=cookieStore.get(url);
返回cookies!=null?cookies:new ArrayList();
}
})
.build();
Request Request=newrequest.Builder()
.url(“http://development.abc.com/login")
.职位(机构)
.addHeader(“接受”、“应用程序/vnd.collection+json”)
.addHeader(“授权”、“基本机密==”)
.addHeader(“缓存控制”、“无缓存”)
.addHeader(“Cookie”,Cookie)
.addHeader(“内容类型”、“应用程序/x-www-form-urlencoded”)
.build();
响应=空;
尝试
{
response=client.newCall(request.execute();
String str=response.body().String();
}捕获(例外e){
e、 printStackTrace();
}
同一个服务器调用如何返回不同的结果

我在“”中检查了还需要在标题中添加
用户代理
,所以我也尝试了这个,但没有成功

还有一件事,如果我在这次通话中使用了错误的凭证(例如,正文:电子邮件、密码),我会在Okhttp和PostMan上收到相同的错误


谢谢。

我终于解决了这个问题

实际上,这是一个重定向问题,需要与服务器人员交谈。 我要做的是让它工作

  • 进行登录服务器调用
  • 已从服务器获取cookie
  • 保存cookie
  • 再次进行服务器调用,并在标头中添加cookie
是的,这里的数据和邮递员的数据是一样的


谢谢大家:)

我最近遇到了一个类似的问题,我收到了一个成功的邮递员回复(一个加密的正文)和来自OkHttp的一个格式错误的加密回复

我的拦截器被添加为

OkHttpClient.Builder().addNetworkInterceptor(MyInterceptor());

我可以通过将(.addNetworkInterceptor)更改为(.addInterceptor)来解决此问题

使用诸如Fiddler或Charles之类的拦截器调试HTTP调用。然后,您可以比较两个请求是否相同。您可能还需要与服务器人员交谈!好的,我会尝试的,非常感谢。尝试使用此拦截器并查看运行了什么curl命令