/*
* Write by cocobear
* cocobear.cn@gmail.com
* *
*/
//package Jwind;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.*;
import org.apache.commons.httpclient.methods.*;
import java.util.*;
import org.apache.commons.httpclient.params.*;
import org.apache.commons.httpclient.methods.multipart.*;
public class Jwind
{
public static void main(String[] args) {
BackFrame frame = new BackFrame();
}
}
class BackFrame extends JFrame
{
public TopJPanel panela;
public DownJPanel panelb;
public AutoRegister UserPass;
public BackFrame() {
setLocation(180,180);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setTitle("Jwind -- by cocobear.infoquot;);
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
setLayout(new GridLayout(2,1,1,1));
panela = new TopJPanel();
panelb = new DownJPanel();
add(panela);
add(panelb);
setVisible(true); /*在添加完所有组件后再设置可见*/
}
public static final int DEFAULT_WIDTH = 600;
public static final int DEFAULT_HEIGHT = 400;
class ButtonAction implements ActionListener
{
public ButtonAction(int i) {
;
}
public void actionPerformed(ActionEvent event) {
System.out.println("start click!");
String url = panela.panela.URL.getText();
String user = panela.panela.User.getText();
String pass = panela.panela.Pass.getText();
String fid = panela.panela.FID.getText();
String tid = panela.panela.TID.getText();
String encode = panela.panela.Encode.getText();
String title = panelb.Title.getText();
String content = panelb.Content.getText();
int PostType = 3;
int AutoReg = 0;
int AllFid = 0;
if (panela.panelb.AutoReg.isSelected()) {
AutoReg = 1;
try {
UserPass = new AutoRegister(url);
user = UserPass.getUser();
pass = UserPass.getPass();
System.out.println("注册成功用户:"+user);
System.out.println("密码为:"+pass);
} catch (IOException e) {
System.out.println("Error"+e.toString());
}
}
if (panela.panelb.AllF.isSelected()) {
AllFid = 1;
}
if (panela.panelb.AutoReply.isSelected()) {
PostType = 1;
}
else if (panela.panelb.ReplyOld.isSelected()) {
PostType = 2;
}
else {
PostType = 3;
if (url.equals("") || user.equals("") || pass.equals("") || fid.equals("") || title.equals("") || content.equals("") || encode.equals("") ) {
System.out.println("少参数");
}
try {
NewPost post = new NewPost(url,user,pass,fid,title,content,encode);
} catch (IOException e) {
System.out.println("Error"+e.toString());
}
}
System.out.println("原始URL:"+url);
System.out.println("发贴类型: "+PostType);
System.out.println("自动注册"+AutoReg);
System.out.println("所有版块"+AllFid);
}
}
class TopJPanel extends JPanel
{
public TLeftJPanel panela;
public TRightJPanel panelb;
public TopJPanel() {
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.fill = GridBagConstraints.BOTH;
panela = new TLeftJPanel();
panelb = new TRightJPanel();
JPanel panelc = new JPanel();
gc.weightx = 1; /*上部左边面板占2/3空间*/
gc.weighty = 1; /*左右面板占满纵向空间*,改为其它数值也可以,但必须设置*/
// gc.gridwidth = 3;
gc.gridx = 0;
add(panela,gc);
gc.gridx = 1;
add(panelc,gc);
gc.gridx = 2;
//gc.gridwidth = 2;
add(panelb,gc);
setVisible(true);
}
}
class TLeftJPanel extends JPanel
{
public JTextField User;
public JTextField Pass;
public JTextField URL;
public JTextField FID;
public JTextField TID;
public JTextField Encode;
public TLeftJPanel() {
JLabel LabUser;
JLabel LabURL;
JLabel LabPass;
JLabel LabFID; /*版块ID*/
JLabel LabTID; /*贴子ID*/
JLabel LabEncode;
//setBackground(Color.BLACK);
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.fill = GridBagConstraints.HORIZONTAL;
LabURL = new JLabel("论坛地址:");
LabUser = new JLabel("用户名:");
LabPass = new JLabel("密码:");
LabFID = new JLabel("版块ID:");
LabTID = new JLabel("贴子ID:");
LabEncode = new JLabel("网页编码:");
LabURL.setHorizontalAlignment(JLabel.CENTER); /*设置居中*/
LabUser.setHorizontalAlignment(JLabel.CENTER);
LabPass.setHorizontalAlignment(JLabel.CENTER);
LabFID.setHorizontalAlignment(JLabel.CENTER);
LabTID.setHorizontalAlignment(JLabel.CENTER);
LabEncode.setHorizontalAlignment(JLabel.CENTER);
URL = new JTextField("http://1g50.cn/upload");
User = new JTextField("test");
Pass = new JTextField("ffffff");
FID = new JTextField("2");
TID = new JTextField("0");
Encode = new JTextField("GBK");
URL.setColumns(8);
gc.gridx = 0;
gc.weightx = 1; /*标签宽度为1*/
gc.weighty = 1; /*高度全部为1*/
add(LabURL,gc);
gc.gridx = 2;
gc.weightx = 2; /*输入框宽度为2*/
add(URL,gc);
gc.gridx = 0;
gc.weightx = 1;
add(LabUser,gc);
gc.gridx = 2;
gc.weightx = 2;
add(User,gc);
gc.gridx = 0;
gc.weightx = 1;
add(LabPass,gc);
gc.gridx = 2;
gc.weightx = 2;
add(Pass,gc);
gc.gridx = 0;
gc.weightx = 1;
add(LabFID,gc);
gc.gridx = 2;
gc.weightx = 2;
add(FID,gc);
gc.gridx = 0;
gc.weightx = 1;
add(LabTID,gc);
gc.gridx = 2;
gc.weightx = 2;
add(TID,gc);
gc.gridx = 0;
gc.weightx = 1;
add(LabEncode,gc);
gc.gridx = 2;
gc.weightx = 2;
add(Encode,gc);
setVisible(true);
}
}
class TRightJPanel extends JPanel
{
public JCheckBox AutoReg;
public JCheckBox AllF;
public JRadioButton AutoReply;
public JRadioButton ReplyOld;
public JRadioButton NewThread;
public ButtonGroup group;
public TRightJPanel() {
AutoReg = new JCheckBox("自动注册");
AllF = new JCheckBox("所有版块发贴");
group = new ButtonGroup();
AutoReply = new JRadioButton("发新贴后自动顶");
ReplyOld = new JRadioButton("顶原来发的贴");
NewThread = new JRadioButton("一直发新贴",true);
group.add(AutoReply);
group.add(ReplyOld);
group.add(NewThread);
//setBackground(Color.GREEN);
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.fill = GridBagConstraints.BOTH;
gc.weightx = 1;
gc.weighty = 1;
gc.gridx = 0;
gc.gridwidth = 1;
add(AutoReg,gc);
gc.gridx = 0;
gc.gridwidth = 1;
add(AllF,gc);
gc.gridx = 0;
add(AutoReply,gc);
//gc.gridx = 0;
add(ReplyOld,gc);
//gc.gridx = 0;
add(NewThread,gc);
setVisible(true);
}
}
/*
* 下部面板
*
*/
class DownJPanel extends JPanel
{
public JTextField Title;
public JTextArea Content;
public DownJPanel() {
JLabel LabTitle;
JLabel LabContent;
JLabel LabStatus;
JButton StartButton;
LabTitle = new JLabel("主题:");
LabContent = new JLabel("内容:");
LabStatus = new JLabel("欢迎访问// LabStatus.setHorizontalAlignment(JLabel.CENTER);
StartButton = new JButton("开始");
Title = new JTextField("版主快删了,这是灌水贴");
Content = new JTextArea("灌水来了!");
Content.setRows(4);
Content.setColumns(10);
JScrollPane sp = new JScrollPane(Content); /*为TextArea加入滚动条*/
//setBackground(Color.BLUE);
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.fill = GridBagConstraints.HORIZONTAL;
gc.weightx = 1;
gc.weighty = 1;
add(LabTitle,gc);
gc.weightx = 6;
gc.gridx = 2;
add(Title,gc);
gc.gridx = 0;
gc.weightx = 1;
gc.weighty = 6;
add(LabContent,gc);
Content.setLineWrap(true);
gc.fill = GridBagConstraints.BOTH; /*扩展TextArea*/
gc.gridx = 2;
gc.weightx = 6;
add(sp,gc);
gc.fill = GridBagConstraints.NONE; /*使StartButton不扩展*/
gc.gridx = 0;
gc.weightx = 1;
gc.weighty = 1;
add(StartButton,gc);
gc.gridx = 2;
gc.weightx = 6;
add(LabStatus,gc);
setVisible(true);
/*End of GUI*/
int start = 1;
ButtonAction StartAction = new ButtonAction(start);
StartButton.addActionListener(StartAction);
}
}
}
class AutoRegister
{
public String name = "";
public String pass = "";
public AutoRegister(String url) throws IOException {
String host = "";
String port = "80";
try {
URL regurl = new URL(url);
host = regurl.getHost();
port = "" + ((regurl.getPort() == -1)?80:regurl.getPort());
System.out.println("Host is :"+host);
System.out.println("Port is :"+port);
}catch (MalformedURLException ex) {
}
Random rd = new Random();
int rdget;
do {
if ((rdget = rd.nextInt(122)) > 97) {
char c = (char)rdget;
String tmp = Character.toString(c);
name+=tmp;
}
} while (name.length() < 6 );
System.out.println(name);
do {
if ((rdget = rd.nextInt(122)) > 97) {
char c = (char)rdget;
String tmp = Character.toString(c);
pass+=tmp;
}
} while (pass.length() < 6 );
System.out.println(pass);
HttpClient regclient = new HttpClient();
regclient.getHostConfiguration().setHost(host,80,"http");
String regurl = url.concat("/register.php");
System.out.println(regurl);
HttpMethod regmethod = regPostMethod(regurl,name,pass);
regclient.executeMethod(regmethod);
System.out.println(regmethod.getStatusLine());
String regresponse = new String(regmethod.getResponseBodyAsString().getBytes("8859_1"));
System.out.println(regresponse);
regmethod.releaseConnection();
}
private static HttpMethod regPostMethod(String regurl,String name,String pass) {
PostMethod reg = new PostMethod(regurl);
NameValuePair regname = new NameValuePair("regname",name);
NameValuePair regpwd = new NameValuePair("regpwd",pass);
NameValuePair regemail = new NameValuePair("regemail","cocobear.cn@gmail.com");
// NameValuePair regpwdrepeat = new NameValuePair("regpwdrepeat","ffffff");
NameValuePair forward = new NameValuePair("forward","");
NameValuePair step = new NameValuePair("step","2");
reg.setRequestBody(new NameValuePair[] {regname,regpwd,regemail,forward,step});
return reg;
}
String getUser() {
return name;
}
String getPass() {
return pass;
}
}
class NewPost
{
public NewPost(String url,String user,String pass,String fid,String title,String content,String encode) throws IOException {
String host = "";
String port = "80";
try {
URL regurl = new URL(url);
host = regurl.getHost();
port = "" + ((regurl.getPort() == -1)?80:regurl.getPort());
System.out.println("Host is :"+host);
System.out.println("Port is :"+port);
}catch (MalformedURLException ex) {
}
HttpClient client = new HttpClient();
client.getHostConfiguration().setHost(host, 80, "http");/*需要更改端口*/
//client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
String posturl = url.concat("/post.php");
String loginurl = url.concat("/login.php");
String geturl1 = posturl.concat("?fid=");
String geturl = geturl1.concat(fid);
System.out.println("Post url is "+posturl);
System.out.println("User is "+user);
System.out.println("Password is "+pass);
System.out.println("geturl is "+geturl);
/*登录论坛*/
PostMethod authpost = new PostMethod(loginurl);
NameValuePair userid = new NameValuePair("pwuser", user);
NameValuePair password = new NameValuePair("pwpwd", pass);
NameValuePair hideid = new NameValuePair("hideid","0");
NameValuePair cktime = new NameValuePair("cktime","31536000");
NameValuePair forward = new NameValuePair("forward","/");
NameValuePair jumpurl = new NameValuePair("jumpurl","/");
NameValuePair step = new NameValuePair("step","2");
authpost.setRequestBody(
new NameValuePair[] {userid, password,hideid,cktime,forward,jumpurl,step});
Map<String,String> headers = new HashMap<String,String>();
client.executeMethod(authpost);
authpost.releaseConnection();
/*登录完成*/
/*获取cookie;自动cookie处理有问题,cookie信息不全*/
for(Header header : authpost.getResponseHeaders("Set-Cookie")) {
String[] sArray = header.getValue().split(";")[0].split("=");
headers.put(sArray[0],sArray[1]);
}
StringBuffer buffer = new StringBuffer();
for (Iterator iterator = headers.keySet().iterator();iterator.hasNext();) {
String key = (String) iterator.next();
buffer.append(buffer.length() > 0 ? ";":"").append(key).append("=").append(headers.get(key));
}
/*获取verify值*/
GetMethod getverify = new GetMethod(geturl);
getverify.addRequestHeader("Cookie",buffer.toString());
client.executeMethod(getverify);
String result = null;
StringBuffer resultBuffer = new StringBuffer();
BufferedReader in = new BufferedReader(
new InputStreamReader(
getverify.getResponseBodyAsStream(),
getverify.getResponseCharSet()));
String inputLine = null;
String strverify = null;
while ((inputLine = in.readLine()) != null) {
String strofverify = "verify";
if (inputLine.indexOf(strofverify) != -1) {
strverify = inputLine.substring(42,50);/*verify值在一行的指定位置*/
}
}
System.out.println("verify is :" + strverify);
in.close();
/*String encode = "gbk";
result = ConverterStringCode(resultBuffer.toString(), getverify.getResponseCharSet(), encode);
System.out.println(result);
*/
getverify.releaseConnection();
/*获取verify值完成*/
/*开始提交贴子*/
PostMethod autopost = new PostMethod(posturl);
autopost.addRequestHeader("Cookie",buffer.toString());
autopost.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler());
//autopost.removeRequestHeader("Content-Type");
//autopost.addRequestHeader(new Header("Content-Type","text/html; charset=GBK"));
System.out.println(strverify);
StringPart verify = new StringPart("verify",strverify);
StringPart atc_title = new StringPart("atc_title",title,encode);
StringPart atc_autourl = new StringPart("atc_autourl","1");
StringPart atc_usesign = new StringPart("atc_usesign","1");
StringPart atc_convert = new StringPart("atc_convert","1");
StringPart atc_content = new StringPart("atc_content",content,encode);
StringPart atc_rvrc = new StringPart("act_rvrc","0");
//StringPart atc_hide = new StringPart("atc_hide","1");
StringPart atc_money = new StringPart("atc_money","0");
StringPart atc_downrvrc1 = new StringPart("atc_downrvrc1","0");
StringPart atc_desc1 = new StringPart("atc_desc1","");
StringPart atc_step = new StringPart("step","2");
StringPart pid = new StringPart("pid","");
StringPart action =new StringPart("action","new");
StringPart atc_fid = new StringPart("fid","2");
StringPart tid = new StringPart("tid","0");
StringPart special = new StringPart("special","0");
Part[] parts = {verify,atc_title,atc_autourl,atc_usesign,atc_convert,atc_content,atc_rvrc,atc_money,atc_downrvrc1,atc_desc1,atc_step,pid,action,atc_fid,tid,special,};
autopost.setRequestEntity(new MultipartRequestEntity(parts,autopost.getParams()));
int status = client.executeMethod(autopost);
System.out.println("autopost return "+status);
String response = new String(autopost.getResponseBodyAsString().getBytes("8859_1"));
System.out.println(response);
}
private static String ConverterStringCode(String source, String srcEncode, String destEncode) {
if (source != null) {
try {
return new String(source.getBytes(srcEncode), destEncode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return "";
}
} else {
return "";
}
}
}