因此。我的问题非常奇怪(对我来说)。我正在使用Volley向this网站发送HTTP请求。使用相同的代码我得到3种类型的响应。一个是充满奇怪的符号(WRÄÕΨäxúD©zíÿ&ôÂD......),第二个是页面自己的错误页面,第三个类型是我想要的那个:药物的页面。
我获得所需的实际结果页面的唯一方法是奇怪的事情。我正在向药品页面发送HTTP GET。这样做会产生类型1或类型2.但是!当我第一次点击链接(我在Android Studio中登录)并使用桌面浏览器转到页面时(通常会经过几次尝试,有时会弹出错误页面)然后再点击我的应用程序中的链接,它会加载正常!
我已经尝试过很多次了,看起来这确实是它的工作方式。我没有重新启动我的应用程序,因为我可以返回结果视图并再次点击该药。我可能会点击药物数十次总是以错误页面或奇怪的符号结束,但是访问我桌面上的页面然后再次在应用程序中单击它会产生所需的页面。问题是什么?关于饼干的事情?
请求的代码如下:
public static void requestWithUrl(final HTTPRequestListener listener, final String url) {
Log.d("WUT", "URL: " + url);
final StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("WUT", "Got url response");
try {
String encoding = "UTF-8";
String line;
InputStream stream = new ByteArrayInputStream(response.getBytes(encoding));
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, encoding));
while ((line = reader.readLine()) != null) {
Log.d("WUT", "LINE: " + line);
}
} catch (Exception e) {
listener.onHTTPFailure();
}
listener.onFoundSingle("Title", response, true);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("WUT", "Got url error");
listener.onHTTPFailure();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("Content-Type", "text/html; charset=utf-8");
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("Host", "www.laakeinfo.fi");
params.put("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0");
params.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
params.put("Accept-Language", "fi-FI,fi;q=0.8,en-US;q=0.5,en;q=0.3");
params.put("Accept-Encoding", "gzip, deflate");
params.put("Referer", "http://www.laakeinfo.fi/Search.aspx");
return params;
}
};
request.setTag(TAG);
queue.add(request);
}
答案 0 :(得分:0)
似乎打开问题是非常有效的,因为我找到了答案。简单地说,当我第一次请求药物清单时,我会在Set-Cookie
中获得parseNetworkResponse
标题内容并保存。然后,当我请求实际页面时,我将Cookie
参数设置为已保存的cookie,一切都像梦一样。