Zdravím,
mám problém s komunikací přes HTTP protokol. Píšu program, který by měl být schopen se přihlásit na moje webové stránky, ale server mi vrací buď HTTP 400 nebo (pokud se snažím komunikaci sledovat přes WebScarab) HTTP 500. Ale i přes tyto chyby se mi do databáze zapíše, že jsem byl přihlášen a pokud si z cookies vytáhnu PHPSESSID a nastavím je v prohlížeči, tak jsem normálně přihlášený.
Nejdříve si do Stringu uložím obsah proměnných, které budu serveru posílat(metodou POST)
String data = new String();
try{
data = URLEncoder.encode("login", "UTF-8") + "=" + URLEncoder.encode(login, "UTF-8");
data += "&"+URLEncoder.encode("heslo", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8");
//data += "&"+URLEncoder.encode("login", "UTF-8") + "=" + URLEncoder.encode("OK", "UTF-8");
}catch(UnsupportedEncodingException exc){
throw new UnsupportedEncodingException("Vyjímka UnsupportedEncodingException při kódování POST požadavků! "+exc.getMessage());
}
Potom vytvořím HttpURLConnection pomocí vlastní metody initializeConnection
private HttpURLConnection initializeConnection(String data){
try{
HttpURLConnection httpCon = (HttpURLConnection)url.openConnection();
//httpCon.disconnect();
httpCon.setRequestMethod("POST");
httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpCon.setRequestProperty("User-Agent", "Java (Poster-test)");
httpCon.setRequestProperty("Content-Length", Integer.toString(data.length()));
httpCon.setRequestProperty("Connection", "close");
httpCon.setReadTimeout(5000);
httpCon.setUseCaches(false);
httpCon.setDoInput(true);
httpCon.setDoOutput(true);
httpCon.connect();
return httpCon;
}catch(Exception e){
JOptionPane.showMessageDialog(null, e.getMessage(), "Error initializing connection!", JOptionPane.ERROR_MESSAGE);
return null;
}
}
následně zapíšu data, která chci POSTem poslat
//odeslani dat
DataOutputStream wr = new DataOutputStream(httpCon.getOutputStream());
wr.writeBytes(data);
wr.flush();
wr.close();
a přečtu a vypíšu odpověď ze serveru
//ziskani odpovedi
BufferedReader response = new BufferedReader(new InputStreamReader(httpCon.getInputStream()));
String line = new String();
while((line = response.readLine())!=null){
AutoPoster.jTextArea1.setText(AutoPoster.jTextArea1.getText()+line+"\n");
}
response.close();
Kód na přihlášení
<?php
session_start();
session_register("logged");
session_register("username");
session_register("prava");
require "./incl/db.php";
require "./incl/fce.php";
$login = $_POST["login"];
$heslo = $_POST["heslo"];
if(isset($login)&&isset($heslo))
{
$login = strtolower($login);
$login = mysql_real_escape_string($login);
$heslo = mysql_real_escape_string($heslo);
$query = mysql_query("SELECT * FROM `users` WHERE `username` = '$login' AND `password` = '$heslo'") or die (mysql_error());
$vysledek = mysql_fetch_assoc($query);
if($vysledek)
{
if($vysledek["active"])
{
$id = $vysledek["id"];
mysql_query("UPDATE `users` SET `lastlogin` = NOW() WHERE `id` = $id LIMIT 1");
$_SESSION["logged"]="1";
$_SESSION["prava"]=$vysledek["prava"];
$_SESSION["username"]=$vysledek["username"];
redirect("main", "Přihlášení bylo úspěšné!");
}else
{
redirect("main", "Je nejprve potřeba aktivovat váš účet");
}
}
else {
redirect("main", "Chybné přihlašovací údaje!");
}
}else{
echo "Login || PW not set";
}
?>
Předem díky za rady :)