所以。我的问题(对我来说)非常奇怪。我正在使用Volley向这个网站发送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);
}
自从我找到答案以来,打开问题似乎很有治疗作用。简单地说,当我第一次请求药物列表时,我会在parseNetworkResponse
中获取Set-Cookie
标题的内容并保存它。然后,当我请求实际页面时,我将Cookie
参数设置为保存的cookie,一切都像做梦一样。