Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача POST c помощью сокет, не могу найти ошибку 
V
    Опции темы
m1ha
Дата 29.5.2007, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 14.5.2007

Репутация: нет
Всего: 1



Есть страница которая получает POST переменную и выводит её на экран
Код

<html><body>
<?php
$name = $_REQUEST["name"];
print($name);
?>
</body></html>

Вод код который должен передавать значение name
Код

import java.io.*;
import java.net.*;
public class Login {
    public void post_login() {
        try {
            byte buf[] = new byte[64 * 1024];
            int r;
            FileInputStream fis = new FileInputStream("data.txt");
            /** data.txt
                POST /form.php HTTP/1.1                            
                            Host:localhost
               
                            name=m1ha
             */        
                        r = fis.read(buf);
            String header = new String(buf, 0, r);
            fis.close();
            Socket s = new Socket("localhost", 80);
            OutputStream ops = s.getOutputStream();
            ops.write(header.getBytes());
            InputStream is = s.getInputStream();
            FileOutputStream fos = new FileOutputStream("testreply.html");
            while (r > 0) {
                r = is.read(buf);
                if (r > 0)
                    fos.write(buf, 0, r);
            }
        } catch (Exception e) {
            System.out.print("Error");
        }
    }
    public static void main(String args[]) {
        Login l = new Login();
        l.post_login();
    }

}


Но страница которую я получаю ведет себя так будто она и не получала POST, то есть не отображает имя. Потратил много времени так и не смог найти ошибку :[

Это сообщение отредактировал(а) m1ha - 30.5.2007, 03:04
PM MAIL   Вверх
m1ha
Дата 30.5.2007, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 14.5.2007

Репутация: нет
Всего: 1



Нашёл сорс по которому смог сделать что хотел, но до сих пор не могу понять что не так в начальном варианте

Код

try {
        // Construct data
        String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
        data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
    
        // Create a socket to the host
        String hostname = "hostname.com";
        int port = 80;
        InetAddress addr = InetAddress.getByName(hostname);
        Socket socket = new Socket(addr, port);
    
        // Send header
        String path = "/servlet/SomeServlet";
        BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
        wr.write("POST "+path+" HTTP/1.0\r\n");
        wr.write("Content-Length: "+data.length()+"\r\n");
        wr.write("Content-Type: application/x-www-form-urlencoded\r\n");
        wr.write("\r\n");
    
        // Send data
        wr.write(data);
        wr.flush();
    
        // Get response
        BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            // Process line...
        }
        wr.close();
        rd.close();
    } catch (Exception e) {
    }

PM MAIL   Вверх
ekr
Дата 30.5.2007, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: нет
Всего: 19



Цитата

но до сих пор не могу понять что не так в начальном варианте

сдается мне, что в первом случае был забыт хедеры content-length и content-type

Это сообщение отредактировал(а) ekr - 30.5.2007, 08:13


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
nerezus
  Дата 1.6.2007, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



content-length должен обязательно содержать полную длину POST-запроса.


А вообще на все подобные вопросы есть универсальный ответ: ключевое слово Wireshark для google


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
kkorsakoff
Дата 1.6.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 14



nezerus +

Я тоже пользуюсь Ethereal (старое название для wireshark)

Ну и если вооружиться RFC (http://www.rfc-editor.org/), то практически все сетевые проблемы автоматически отпадаютsmile
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.