能力值:
( LV2,RANK:10 )
2 楼
我抓包来提交了一些POST数据,还是不行
以下是代码
public static void main(String[] args) throws Exception {
URL url = new URL("http://dotazj.uuu9.com/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
String name = URLEncoder.encode("官人可以不", "utf-8");
System.out.println(name);
connection
.getOutputStream()
.write(
("__VIEWSTATE=篇幅限制&__EVENTVALIDATION=篇幅限制&name="
+ name +"&Button2=篇幅限制&ladderRating=0&jushu=0&win=0&p_win=0&mvp=0&resv6=0&resv5=0&resv7=0&resv8=0&resv9=1&resv10=4"
).getBytes());
connection.getOutputStream().flush();
connection.getOutputStream().close();
BufferedReader reader = new BufferedReader(new InputStreamReader(
connection.getInputStream(), "utf-8"));
String str = null;
while ((str = reader.readLine()) != null) {
System.out.println(str);
}
reader.close();
}
能力值:
( LV2,RANK:10 )
3 楼
如上图红圈所示 ? 是哪里
能力值:
( LV6,RANK:80 )
4 楼
__VIEWSTATE与__EVENTVALIDATION两个值不是固定的。
每次打开页面都不一样。得先提取出来。
然后再POST
上传的附件:
能力值:
( LV2,RANK:10 )
5 楼
[QUOTE=HOWMP;1164067]__VIEWSTATE与__EVENTVALIDATION两个值不是固定的。
每次打开页面都不一样。得先提取出来。
然后再POST[/QUOTE]
我就是先提取出来的啊。。麻烦大神给写段代码吧?
能力值:
( LV2,RANK:10 )
6 楼
战绩一览中的数据 和 鉴定结果中的数据
能力值:
( LV3,RANK:20 )
7 楼
package org.rscis.test;
import java.io.IOException;
import org.apache.http.client.ClientProtocolException;
import org.rscis.utils.regex.RegexOpt;
import org.rscis.utils.rsHttpClient.RsHttpClient;
import org.rscis.utils.rsHttpClient.RsHttpClientException;
public class TesthDotazjUuu9Com {
public static void main(String[] args) throws ClientProtocolException, IOException, RsHttpClientException {
RsHttpClient client = new RsHttpClient();
String firstPage = client.getMethod("http://dotazj.uuu9.com/");
// System.out.println(firstPage);
//<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTU0OTE0ODA1NmRkGbqyrPsb5Jhf4T2qFtAiS6Dy7Ko=" />
String __VIEWSTATE = RegexOpt.getString(firstPage, "id=\"__VIEWSTATE\" value=\"(.+?)\"", 1);
//<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWDQKYkpXoDQL7uPQdArursYYIApOixrIJArqP2b0HAp2ilpYPAtO31N4HAp3hgG0CgZLB4wgCgpLB4wgCgJLB4wgC9pHB4wgC/pGB5AiIAnMm7r/a4sYrcbm2WhKuK6/JWg==" />
String __EVENTVALIDATION = RegexOpt.getString(firstPage, "id=\"__EVENTVALIDATION\" value=\"(.+?)\"", 1);
String name = "官人可以不";
String postData = "__VIEWSTATE=" + __VIEWSTATE + "&__EVENTVALIDATION=" + __EVENTVALIDATION + "&name=" + name + "&Button2=鉴定玩家&ladderRating=&jushu=&win=&p_win=&mvp=&resv6=&resv5=&resv7=&resv9=&resv10=";
String resultPage = client.postMethod("http://dotazj.uuu9.com/", postData);
// <p>
// 天梯积分:</p>
// <input name="ladderRating" type="text" id="ladderRating" class="text2" value="1429" /></li>
String 天梯积分 = RegexOpt.getString(resultPage, "id=\"ladderRating\" class=\"text2\" value=\"(\\d+)\"", 1);
//<li>
// <p>
// 局数:</p>
// <input name="jushu" type="text" id="jushu" class="text2" value="1728" /></li>
String 局数 = RegexOpt.getString(resultPage, "id=\"jushu\" class=\"text2\" value=\"(\\d+)\"", 1);
//<li>
// <p>
// 胜场:</p>
// <input name="win" type="text" id="win" class="text2" value="876" /></li>
String 胜场 = RegexOpt.getString(resultPage, "id=\"win\" class=\"text2\" value=\"(\\d+)\"", 1);
//<li>
// <p>
// 胜率:</p>
// <input name="p_win" type="text" id="p_win" class="text2" value="50.69%" /></li>
String 胜率 = RegexOpt.getString(resultPage, "id=\"p_win\" class=\"text2\" value=\"([\\d\\.%]+)\"", 1);
//<li>
// <p>
// MVP:</p>
// <input name="mvp" type="text" id="mvp" class="text2" value="192" /></li>
String MVP = RegexOpt.getString(resultPage, "id=\"mvp\" class=\"text2\" value=\"(\\d+)\"", 1);
//<li>
// <p>
// 破:</p>
// <input name="resv6" type="text" id="resv6" class="text2" value="209" /></li>
String 破 = RegexOpt.getString(resultPage, "id=\"resv6\" class=\"text2\" value=\"(\\d+)\"", 1);
//<li>
// <p>
// 富:</p>
// <input name="resv5" type="text" id="resv5" class="text2" value="206" /></li>
String 富 = RegexOpt.getString(resultPage, "id=\"resv5\" class=\"text2\" value=\"(\\d+)\"", 1);
//<li>
// <p>
// 军:</p>
// <input name="resv7" type="text" id="resv7" class="text2" value="186" /></li>
String 军 = RegexOpt.getString(resultPage, "id=\"resv7\" class=\"text2\" value=\"(\\d+)\"", 1);
//<li>
// <p>
// 补:</p>
// <input name="resv9" type="text" id="resv9" class="text2" value="243" /></li>
String 补 = RegexOpt.getString(resultPage, "id=\"resv9\" class=\"text2\" value=\"(\\d+)\"", 1);
//<li>
// <p>
// 魂:</p>
// <input name="resv10" type="text" id="resv10" class="text2" value="201" /></li>
String 魂 = RegexOpt.getString(resultPage, "id=\"resv10\" class=\"text2\" value=\"(\\d+)\"", 1);
String printResult = "天梯积分\t : " + 天梯积分 + "\n" +
"局数 : " + 局数 + "\n" +
"胜场 : " + 胜场 + "\n" +
"胜率 : " + 胜率 + "\n" +
"MVP : " + MVP + "\n" +
"破 : " + 破 + "\n" +
"富 : " + 富 + "\n" +
"军 : " + 军 + "\n" +
"补 : " + 补 + "\n" +
"魂 : " + 魂;
System.out.println(printResult);
}
}
天梯积分 : 1429 局数 : 1728 胜场 : 876 胜率 : 50.69% MVP : 192 破 : 209 富 : 206 军 : 186 补 : 243 魂 : 201
能力值:
( LV3,RANK:20 )
8 楼
[ ATTACH ] Selection_013.png [ /ATTACH ]
Eclipse的效果挺好,贴上来排版有点乱~~~~~~~~
上传的附件:
能力值:
( LV2,RANK:10 )
9 楼
org.rscis.utils.regex.RegexOpt 这是那个jar包 亲??
能力值:
( LV2,RANK:10 )
10 楼
亲 是否可以提供下 以下类:
import org.rscis.utils.regex.RegexOpt;
import org.rscis.utils.rsHttpClient.RsHttpClient;
import org.rscis.utils.rsHttpClient.RsHttpClientException;
能力值:
( LV2,RANK:10 )
11 楼
各种搜索真心找不到这些类
能力值:
( LV2,RANK:10 )
12 楼
以上类应该是,他自己扩展私人类库。
他已经说原理告诉你的了,用java的正则把
__VIEWSTATE与__EVENTVALIDATION先提取value值。再进行第二次提交要想查找的数据。如果是shell脚本,一个sed或awk一个wget or curl同时很容易实现。当然用perl就更easy!
能力值:
( LV3,RANK:20 )
13 楼
这都是我自己分装的类,你当然搜索不到
RegexOpt是对正则表达式操作的分装,一眼就能看出做了什么操作啊,自己还原下好了啊
当成伪码看吧
RsHttpClient是对HttpClient 4.x的封装,你可以找找HttpClient的教程,直接给你代码学不到啥的
你这个抓取是很基本的,没什么难度的
能力值:
( LV2,RANK:10 )
14 楼
非常感谢。。
能力值:
( LV2,RANK:10 )
15 楼
感谢Peter牛,看到这里明白了。