@Los-angels

Как правильно отправить запрос?

Отправляю запрос на яндекс диск чтобы узнать содержимое каталога но мне ни чего не выводит в файл.
Подскажите что не так?
import java.io.*;
import java.net.*;

class HTTPClient
{
    
   
    public static void main(String args[])
    {
        try
        {
            byte buf[] = new byte[64*1024];
            int r;

            // читаем файл с запросом в переменную header
            FileInputStream fis = new FileInputStream("testrequest.txt");
            r = fis.read(buf);
            String header = new String(buf, 0, r);
            fis.close();

            // выделяем из строки запроса хост, порт и URL ресурса
            // для выделения используется специальнонаписанная ф-ия extract
            String host = extract(header, "Host:", "\n");

            // если не найден параметр Host - ошибка
            if(host == null)
            {
                System.out.println("invalid request:\n"+header);
                return;
            }

            // находим порт сервера, по умолчанию он - 80
            int port = host.indexOf(":",0);
            if(port < 0) port = 80;
            else
            {
                port = Integer.parseInt(host.substring(port+1));
                host = host.substring(0, port);
            }

            // открываем сокет до сервера
            Socket s = new Socket(host, port);

            // пишем туда HTTP request
            s.getOutputStream().write(header.getBytes());

            // получаем поток данных от сервера
            InputStream is = s.getInputStream();

            // Открываем для записи файл, куда будет слит лог
            FileOutputStream fos = new FileOutputStream("testreply.txt");

            // читаем ответ сервера, одновременно сливая его в открытый файл
            r = 1;
            while(r > 0)
            {
                r = is.read(buf);
                if(r > 0)
                    fos.write(buf, 0, r);
            }

            // закрываем файл
            fos.close();
            s.close();
        }
        catch(Exception e)
        {e.printStackTrace();} // вывод исключений
    }

Содержимое файла testrequest.txt:
PROPFIND / HTTP/1.1
Host: webdav.yandex.ru
Accept: */*
Depth: 1
Authorization: OAuth dd69d1a42a884687b0d1dbd3cea099d5
  • Вопрос задан
  • 285 просмотров
Пригласить эксперта
Ответы на вопрос 1
@volyihin
Разработчик
А в сокет правильные host, port приходят?

Выведите в консоль их значения чтобы убедиться. Попробуем локализовать проблему.

Кстати, у яндекса нет готовых примеров как с ними работать из java?

Ну и я бы для доступу по Http использовал какую-нибудь удобную библиотеку. Можно конечно и на сокетах, но это слишком низкоуровнево.

Например, Apache Http Client
hc.apache.org/httpclient-3.x/userguide.html

или подобное.

Если вы не хотите тянуть дополнительные библиотеки, то можно воспользоваться встроенным в java docs.oracle.com/javase/7/docs/api/java/net/HttpURL...

Чтобы писать-читать из файла можно ещё посмотреть на FileWriter/Reader

https://docs.oracle.com/javase/8/docs/api/java/io/...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы