62,616
社区成员
发帖
与我相关
我的任务
分享
URL url = new URL("http://192.168.1.2/vote/index.php");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//获得session信息
String session_value = urlConnection.getHeaderField("Set-Cookie");
String[] sessionId = session_value.split(";");
//保存session信息
System.out.println(sessionId[0]);
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class TestPost1 {
public static void main(String[] args) throws Exception{
new TestPost1();
}
public TestPost1()throws Exception{
JFrame frame = new JFrame("自动投票程序");
frame.setResizable(false);
frame.setSize(new Dimension(400, 400));
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(300, 200);
frame.setVisible(true);
final JButton ipBut = new JButton("添加ip数据库");
final JButton ipBut1 = new JButton("恢复ip数据库");
final JButton postBut = new JButton("开始投票");
final JButton postBut1 = new JButton("投票");
final JLabel lab = new JLabel();
final JTextField image = new JTextField();
final JTextArea resultText = new JTextArea("程序运行结果如下:\n");
final JScrollPane resultPane = new JScrollPane(resultText,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
frame.getContentPane().add(ipBut, null);
frame.getContentPane().add(ipBut1, null);
frame.getContentPane().add(postBut, null);
frame.getContentPane().add(lab, null);
frame.getContentPane().add(image, null);
frame.getContentPane().add(postBut1, null);
frame.getContentPane().add(resultPane, null);
ipBut.setBounds(10, 10, 120, 30);
ipBut1.setBounds(140, 10, 120, 30);
postBut.setBounds(270, 10, 120, 30);
lab.setBounds(10, 40, 120, 30);
image.setBounds(140, 40, 120, 30);
postBut1.setBounds(270, 40, 120, 30);
resultPane.setBounds(10, 70, 380, 200);
ipBut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
if(arg0.getSource()==ipBut){
new AddIPDatabase();
}
}
});
ipBut1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
if(arg0.getSource()==ipBut1){
//开始投票过程前,先把ip数据库恢复为全部都未进行过投票状态。
File file = new File("resource/ipdatabase_bak.txt");
File temp = new File("resource/ipdatabase.txt");
BufferedReader reader=null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
BufferedWriter writer=null;
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(temp)));
String str=null;
while (null != (str = reader.readLine())){
writer.write(str + "\r\n");
}
reader.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
postBut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
if(arg0.getSource()==postBut){
Thread post1 = new Thread(){
public void run(){
try{
URL url = new URL("http://192.168.0.5/vote/demo/demo.php");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStream is = urlConnection.getInputStream();
//此时session就有了,请求后获取session
String session_value = urlConnection.getHeaderField("Set-Cookie");
String[] sessionId = session_value.split(";");
//保存session信息
//System.out.println(sessionId[0]);
final String session = sessionId[0];
try {
lab.setIcon(new ImageIcon(ImageIO.read(is)));
} catch (IOException e) {
e.printStackTrace();
}
Post(session);
}catch(Exception e){
e.printStackTrace();
}
}
};
post1.start();
}
}
//投票过程
public void Post(final String session){
postBut1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
if(arg0.getSource()==postBut1){
try{
URL url = new URL("http://192.168.0.5/vote/search.php");
URLConnection conn = url.openConnection();
//System.out.println(session);
conn.setRequestProperty("Cookie", session);
conn.setDoOutput(true);
//conn.setDoInput(true);
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8"));
br.write(URLEncoder.encode("name","utf-8"));
br.write("="); // 消息正文特殊字符: = 和 & 不需要编码
br.write(URLEncoder.encode("张三","utf-8"));
br.write("&");
br.write(URLEncoder.encode("inst[0]","utf-8"));
br.write("=");
br.write(URLEncoder.encode("网络","utf-8"));
br.write("&");
br.write(URLEncoder.encode("inst[1]","utf-8"));
br.write("=");
br.write(URLEncoder.encode("游泳","utf-8"));
br.write("&");
br.write(URLEncoder.encode("number","utf-8"));
br.write("=");
String number = image.getText();
br.write(URLEncoder.encode(number,"utf-8"));
System.out.println(URLEncoder.encode(number,"utf-8"));
br.flush();
br.close(); // 关闭输出流
// 提交POST请求
InputStream input = conn.getInputStream();
//接受服务器返回数据
BufferedReader br1 = new BufferedReader(new InputStreamReader(input,"utf-8"));
String line="";
String result = "";
while((line=br1.readLine())!=null) {
result += line + "\n";
}
br1.close();
System.out.println(result);
}catch(Exception e1){
e1.printStackTrace();
}
}
}
});
}
});
}
}
URL url = new URL("http://192.168.0.5/vote/demo/demo.php");
//打开连接等同于我们打开浏览器输入地址但是还没按下回车
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
File outFile = new File("C://temp.bmp");
OutputStream os = new FileOutputStream(outFile);
//用这个连接获取输入流,发出请求等于输入地址按下回车了。你原来用url.openStream();等于url.openConnection().getInputStream,你后面又去url.openConnection();这里就两次url.openConnection()了两次的urlConnection不是一个对象的
InputStream is = urlConnection.getInputStream();
//此时session就有了,请求后获取session
String session_value = urlConnection.getHeaderField("Set-Cookie");
String[] sessionId = session_value.split(";");
//保存session信息
System.out.println(sessionId[0]);
final String session = sessionId[0];
byte[] buff = new byte[1024];
while(true) {
int readed = is.read(buff);
if(readed == -1) {
break;
}
byte[] temp = new byte[readed];
System.arraycopy(buff, 0, temp, 0, readed);
os.write(temp);
}
is.close();
os.close();
new Post(session);
[/quote]
那下载了图片以后怎么获取那个session值?这个session值就在cookie里。[/quote]
url.openStream();和url.openConnection().getInputStream();是一样的,楼主并没有两次请求,不过你获取session顺序不对你还没openStream();就去获取urlConnection.getHeaderField("Set-Cookie");这个session应该要在openStream();也就是请求时才生成的。你应该调整顺序。
像这种模拟的post楼主只要记住对于验证码必须保证此次的请求session和验证码图片一致,带着session和验证码已经数据post到提交地址。url的openStream()以及URLConnection的getInputStream()或者getOutputStream()都会开启请求,楼主只要保证请求的session一致与验证码对应就不会有问题了[/quote]
经过你提醒,我又测试了一下,发现就是我的程序的问题 ,我好像是执行一下获得了两次session,所以投票页面出现的图片不对。
不过按你说的,这不应该只是请求一次吗?
这个代码执行以后会产生两个session,如果我把后面保存session的注释掉的话就是一个session。[/quote]
你在下载图片的时候已经请求了一次了怎么下面又去请求
URL url = new URL("http://192.168.0.5/vote/demo/demo.php");
//打开连接等同于我们打开浏览器输入地址但是还没按下回车
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
File outFile = new File("C://temp.bmp");
OutputStream os = new FileOutputStream(outFile);
//用这个连接获取输入流,发出请求等于输入地址按下回车了。你原来用url.openStream();等于url.openConnection().getInputStream,你后面又去url.openConnection();这里就两次url.openConnection()了两次的urlConnection不是一个对象的
InputStream is = urlConnection.getInputStream();
//此时session就有了,请求后获取session
String session_value = urlConnection.getHeaderField("Set-Cookie");
String[] sessionId = session_value.split(";");
//保存session信息
System.out.println(sessionId[0]);
final String session = sessionId[0];
byte[] buff = new byte[1024];
while(true) {
int readed = is.read(buff);
if(readed == -1) {
break;
}
byte[] temp = new byte[readed];
System.arraycopy(buff, 0, temp, 0, readed);
os.write(temp);
}
is.close();
os.close();
new Post(session);
[/quote]
那下载了图片以后怎么获取那个session值?这个session值就在cookie里。[/quote]
我代码里面不是有获取session嘛,我就是把你那个代码修改了不要两次请求,先请求后去Set-Coookie再下载图片
URL url = new URL("http://192.168.0.5/vote/demo/demo.php");
//打开连接等同于我们打开浏览器输入地址但是还没按下回车
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
File outFile = new File("C://temp.bmp");
OutputStream os = new FileOutputStream(outFile);
//用这个连接获取输入流,发出请求等于输入地址按下回车了。你原来用url.openStream();等于url.openConnection().getInputStream,你后面又去url.openConnection();这里就两次url.openConnection()了两次的urlConnection不是一个对象的
InputStream is = urlConnection.getInputStream();
//此时session就有了,请求后获取session
String session_value = urlConnection.getHeaderField("Set-Cookie");
String[] sessionId = session_value.split(";");
//保存session信息
System.out.println(sessionId[0]);
final String session = sessionId[0];
byte[] buff = new byte[1024];
while(true) {
int readed = is.read(buff);
if(readed == -1) {
break;
}
byte[] temp = new byte[readed];
System.arraycopy(buff, 0, temp, 0, readed);
os.write(temp);
}
is.close();
os.close();
new Post(session);
[/quote]
那下载了图片以后怎么获取那个session值?这个session值就在cookie里。
URL url = new URL("http://192.168.0.5/vote/demo/demo.php");
//打开连接等同于我们打开浏览器输入地址但是还没按下回车
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
File outFile = new File("C://temp.bmp");
OutputStream os = new FileOutputStream(outFile);
//用这个连接获取输入流,发出请求等于输入地址按下回车了。你原来用url.openStream();等于url.openConnection().getInputStream,你后面又去url.openConnection();这里就两次url.openConnection()了两次的urlConnection不是一个对象的
InputStream is = urlConnection.getInputStream();
//此时session就有了,请求后获取session
String session_value = urlConnection.getHeaderField("Set-Cookie");
String[] sessionId = session_value.split(";");
//保存session信息
System.out.println(sessionId[0]);
final String session = sessionId[0];
byte[] buff = new byte[1024];
while(true) {
int readed = is.read(buff);
if(readed == -1) {
break;
}
byte[] temp = new byte[readed];
System.arraycopy(buff, 0, temp, 0, readed);
os.write(temp);
}
is.close();
os.close();
new Post(session);
URL url = new URL("http://192.168.0.5/vote/demo/demo.php");
File outFile = new File("C://temp.bmp");
OutputStream os = new FileOutputStream(outFile);
InputStream is = url.openStream();
byte[] buff = new byte[1024];
while(true) {
int readed = is.read(buff);
if(readed == -1) {
break;
}
byte[] temp = new byte[readed];
System.arraycopy(buff, 0, temp, 0, readed);
os.write(temp);
}
is.close();
os.close();
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
String session_value = urlConnection.getHeaderField("Set-Cookie");
String[] sessionId = session_value.split(";");
//保存session信息
System.out.println(sessionId[0]);
final String session = sessionId[0];
new Post(session);
这个代码执行以后会产生两个session,如果我把后面保存session的注释掉的话就是一个session。