Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建如下格式的JavaHTTP请求?_Java_Amazon Web Services_Api_Http_Request - Fatal编程技术网

如何创建如下格式的JavaHTTP请求?

如何创建如下格式的JavaHTTP请求?,java,amazon-web-services,api,http,request,Java,Amazon Web Services,Api,Http,Request,我需要创建一个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 s

我需要创建一个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();
        }
    }

你可以看出我很迷路

您可以使用套接字来写入请求。 通过这种方式,您可以根据需要编写请求,只需注意行尾字符

请参见以下示例:

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
因此,请求被“正确”发送。但是服务器上发生了一些事情


我希望它能帮助您,再见。

您可以从另一个问题中查看此答案:。还要注意,您正在访问需要授权的资源,在您的情况下,可能不允许基本授权。您可以阅读关于使用Java的HTTP授权的另一个问题,好的,谢谢!我来看看!在Java中支持特定的HTTP应用程序协议时,为什么要使用传输协议接口(套接字)?为了保持较高的自定义级别,HTTP连接的高级支持已经提供了所需的自定义级别。请参阅上述链接。