大家好我想编写一个与phpmyadmin交互的工具。我想创建一个新表。为此,我需要cookie和安全令牌。我做过的两件事。我的问题是我会带上这些饼干并用这些Cookie打开一个新的URLConnection。并获取令牌以验证我的请求。但每次我这样做,我得到了我的SQLQuery为空的响应,如果你得到这个错误你的令牌是无效的。并且无效的令牌意味着您的cookie未在新连接中放置得非常好,因此您没有与以前相同的会话。我做错了什么,有什么想法来解决这个问题吗?
这是我的代码:(非常难看,但仅用于测试目的)
import java.io.*;
import java.net.*;
import java.util.List;
public class connect {
public void connectto() throws IOException{
URLConnection connection = new URL("http://localhost/phpmyadmin/index.php").openConnection();
List<String> cookies = connection.getHeaderFields().get("Set-Cookie");
connection.connect();
InputStream response = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(response));
String line;
String token = "";
while((line = br.readLine())!= null){
System.out.println(line);
if (line.contains("var token = ")){
System.out.println("hit");
token = "&token=" + line.substring(line.indexOf("var token = '") + "var token = '".length()).substring(0, line.substring(line.indexOf("var token = '") + "var token = '".length()).indexOf("';"));
}
}
System.out.println(token);
String url = URLEncoder.encode("db=mysql&sql_query=CREATE TABLE testtable(testtable TEXT);" + token, "UTF-8");
connection = new URL("http://localhost/phpmyadmin/sql.php?" + url).openConnection();
connection.setDoOutput(true);
for (String cookie : cookies) {
System.out.println(cookie.split(";", 2)[0]);
connection.addRequestProperty("Cookie", cookie.split(";", 2)[0]);
}
connection.connect();
response = connection.getInputStream();
br = new BufferedReader(new InputStreamReader(response));
line = "";
while((line = br.readLine())!= null){
System.out.println(line);
}
}
}
答案 0 :(得分:0)
如果我误解了你的问题,我为此道歉,但你为什么要通过phpMyAdmin强制请求呢? phpMyAdmin的目的是为人们提供一个使用MySQL数据库的UI。如果要与MySQL数据库进行交互,则应该直接打开与数据库的连接并在java代码中执行语句。
再次请原谅我的无知,如果这对你来说是不可行的,但如果你必须通过phpMyAdmin工作而不是Java和你的数据库之间的直接连接,请提供更多信息。