关于httpclient实现登陆discuz论坛自动发帖的功能

rosewj1986 2010-07-28 09:33:00
最近在研究使用httpclient4 但是每次测试都不能成功穿透校内啊 discuz啊 不知道为什么 ,代码如下

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;


public class TestDiscuz {
private static String DiscuzLoginURL = "http://www.discuz.net/member.php?mod=logging&action=login&loginsubmit=yes";

private static String userName = "rosewj";
private static String password = "860111";

private static HttpResponse response;


public static void main(String[] args) {
DefaultHttpClient httpclient = new DefaultHttpClient();
// HttpClientParams.setCookiePolicy(httpclient.getParams(),CookiePolicy.BROWSER_COMPATIBILITY); 这行如果不注释的话一些特殊字符的cookie就会丢失

try{
HttpPost httpost = new HttpPost(DiscuzLoginURL);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("password", password));
nvps.add(new BasicNameValuePair("username", userName));
nvps.add(new BasicNameValuePair("loginsubmit", "1"));
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
response = httpclient.execute(httpost);
HttpEntity entity = response.getEntity();
if (entity == null)
throw new Exception("登录失败了");
List<Cookie> cookies = httpclient.getCookieStore().getCookies();// 获得登录后的Cookie列表
System.out.println("httpclient cookie _____________");
for(int i=0;i<cookies.size();i++) {
System.out.println(cookies.get(i).getName());
System.out.println(cookies.get(i).getValue());
}
System.out.println("httpclient cookie _____________");
entity.consumeContent();





HttpPost httpost1 = new HttpPost("http://www.discuz.net/forum.php?mod=post&action=reply&fid=175&tid=1822402&extra=page%3D1&replysubmit=yes&infloat=yes&handlekey=fastpost&inajax=1");


List<NameValuePair> nvps1 = new ArrayList<NameValuePair>();
nvps1.add(new BasicNameValuePair("addfeed", "1"));
nvps1.add(new BasicNameValuePair("usesig", "0"));
nvps1.add(new BasicNameValuePair("formhash", "3e090e74"));
nvps1.add(new BasicNameValuePair("subject", ""));
nvps1.add(new BasicNameValuePair("message", "test213123213123123"));
httpost1.setEntity(new UrlEncodedFormEntity(nvps1, HTTP.UTF_8));
response = httpclient.execute(httpost1);
List<Cookie> cookies1 = httpclient.getCookieStore().getCookies();// 获得登录后的Cookie列表
System.out.println("httpclient cookie _____________");
for(int i=0;i<cookies1.size();i++) {
System.out.println(cookies1.get(i).getName());
System.out.println(cookies1.get(i).getValue());
}
System.out.println("httpclient cookie _____________");

// 打印响应信息
String result =response.getStatusLine().toString();
System.out.println(result);
HttpEntity entity1 = response.getEntity();
entity1.consumeContent();
// entity1.consumeContent();
}catch(Exception e) {

}
}


}


同时我在discuz论坛登录状态下copy了发帖的url ,还是提示请求来路不明或者参数验证不正确,不知为何 跪求高手解答
...全文
1037 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangjiyue 2010-10-10
  • 打赏
  • 举报
回复
造成"您的请求来路不正确,无法提交。"的原因有2:
1.formhash不正确
2.HTTP_REFERER 跟当前域名不一致

是不是你的java程序里面没有伪造 HTTP_REFERER?

至于formhash,计算方法是 substr(md5(substr($_G['timestamp'], 0, -7).$_G['username'].$_G['uid'].$_G['authkey'].$hashadd.$specialadd), 8, 8);
跟其他的无关,只跟当前的账户关联。
rosewj1986 2010-07-28
  • 打赏
  • 举报
回复
顶下顶下顶下顶下顶下
rosewj1986 2010-07-28
  • 打赏
  • 举报
回复
顶下顶下顶下顶下顶下
rosewj1986 2010-07-28
  • 打赏
  • 举报
回复
传的值我都是从firebug取到的 所有参数应该都是对的 只是我通过url访问的时候这个页面提示请求来路不明或者参数验证不正确 不知道discuz这个安全是如何实现的
qingyunzhuimeng 2010-07-28
  • 打赏
  • 举报
回复
你应该搞清楚,它是如何request 和 response的,之后你再用httpclient,
你传的值对不对,还有它是不是对你传的参数解析不了呀,它是不是采用的Json对象传递参数呀,总之想要成功介入的话,你得把这些都弄清楚了,好了,你只是把代码发出来,是看不出来正不正确的
rosewj1986 2010-07-28
  • 打赏
  • 举报
回复
顶下。discuz论坛中请求来路不明或者参数验证不正确式什么原因引起的啊?
winterlight09 2010-07-28
  • 打赏
  • 举报
回复
不大明白,什么叫“穿透校内”?

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧