更新时间:2023-01-20 16:08:08
问题
HttpURLConnection
不支持 JavaScript,但使用 JavaScript 生成所需的 cookie.
HttpURLConnection
has no JavaScript support, but a needed cookie is generated using JavaScript.
您的来电
String reqUrl = "http://zxccvvv.cuccfree.com/send_data.php";
URL url = new URL(reqUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
失败,因为 cookie __test
丢失.
fails, because the cookie __test
is missing.
修复
乍一看 JavaScript 源代码,对于给定的 url,cookie 似乎是常量,因此为 常量 cookie 设置可能就足够了:
From a first glance at the JavaScript source the cookie seems to be constant for a given url, so it might be enough to set for a constant cookie:
String cookie = "__test=2bf7c15501c0ec57f8e41cb84871a69c";
URL url = new URL(reqUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(7000);
conn.setRequestMethod("GET");
conn.setRequestProperty("Cookie", cookie);
替代方案:我们可以使用 WebView 获取 cookie,因此这是更可取的方法,因为它不会中断,如果 cookie 发生变化并且不会有太多时间延迟:>
Alternative: Using a WebView we can grab the cookie, so this is the preferable approach, since it will not break, if the cookie changes and it is not much of a time delay:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getCookie();
if(cookie!=null) {
new GetContacts().execute();
}
}
private void getCookie(){
CookieManager.setAcceptFileSchemeCookies(true);
WebView wv = new WebView(getApplicationContext());
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(url);
cookie = CookieManager.getInstance().getCookie("zxccvvv.cuccfree.com");
}
并按照上面的例子进行设置:
and set it as in above example:
conn.setRequestProperty("Cookie", cookie);
logcat 中的输出
Response from url: [{"0":"1","id":"1","1":"pertanyaan ke 1","ask":"pertanyaan ke 1"},{"0":"2","id":"2","1":"pertanyaan ke 2","ask":"pertanyaan ke 2"},{"0":"3","id":"3","1":"pertanyaan ke 3","ask":"pertanyaan ke 3"},{"0":"4","id":"4","1":"pertanyaan ke 4","ask":"pertanyaan ke 4"},{"0":"5","id":"5","1":"pertanyaan ke 5","ask":"pertanyaan ke 5"}]