如何创建如下格式的JavaHTTP请求?
我需要创建一个Java应用程序,该应用程序创建如下格式的PUT请求:如何创建如下格式的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
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连接的高级支持已经提供了所需的自定义级别。请参阅上述链接。