我想从服务器获取一些数据。主要问题是我没有服务器访问,但当然我知道请求的详细信息,我使用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都会出现同样的错误。
谢谢。
使用拦截器(如Fiddler或Charles)调试HTTP调用。然后您可以比较两个请求是否相同。你可能不得不与服务员家伙交谈! –
好吧,会尽力感谢。 –
尝试使用此拦截器并查看正在运行的卷曲命令 https://github.com/mrmike/Ok2Curl –