Как создать HTTP-запрос Java в таком формате? - PullRequest
0 голосов
/ 27 августа 2018

Мне нужно создать приложение Java, которое создает запрос PUT, отформатированный так:

PUT /AccountId/vaults/VaultName HTTP/1.1
Host: glacier.Region.amazonaws.com
Date: Date
Authorization: SignatureValue
Content-Length: Length
x-amz-glacier-version: 2012-06-01

Я довольно плохо знаком с форматированием запросов, поэтому любая помощь будет оценена. Единственное, что у меня есть в моем коде:

public static void main(String[] args) {
        try {
            URL url = new URL("http://glacier.us-east-1.amazonaws.com");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("PUT");
            int code = con.getResponseCode();
            System.out.print(code);
        }

        catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Как вы можете сказать, я довольно потерян.

1 Ответ

0 голосов
/ 27 августа 2018

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

Пожалуйста, смотрите следующий пример:

package test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;

public class Test {

    public static void main(String[] args) {

        try {

            String hostname = "glacier.us-east-1.amazonaws.com";
            int port = 80;

            InetAddress addr = InetAddress.getByName(hostname);
            Socket socket = new Socket(addr, port);
            // Send headers
            BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
            wr.write("PUT /AccountId/vaults/VaultName HTTP/1.1\n\r");
            wr.write("Host: glacier.Region.amazonaws.com\n\r");
            wr.write("Date: Date\n\r");
            wr.write("Authorization: SignatureValue\n\r");
            wr.write("Content-Length: Length\n\r");
            wr.write("x-amz-glacier-version: 2012-06-01\n\r");
            wr.write("\n\r");
            wr.flush();

            // Get response
            BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line;
            while ((line = rd.readLine()) != null) {
                System.out.println(line);
            }

            wr.close();
            rd.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

В приведенном выше примере я получаю:

HTTP/1.1 500 Internal Server Error
Transfer-Encoding: chunked
Date: Mon, 27 Aug 2018 16:05:29 GMT
Connection: close

0

Итак, запрос отправлен "правильно". Но что-то случилось на сервере.

Надеюсь, это поможет вам, пока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...