Запрос HTTP-PUT в android

Я хочу сделать запрос HTTP-PUT для Amazon S3. Он работает со скручиванием:

curl -v --upload-file file.jpg 'mybucket.amazonaws.com/avatars/cbe7e51de13c1cf93027ab7e14dbd910.jpg?Expires=1419615226&AWSAccessKeyId={MY_KEY}&Signature={MY_SIGNATURE}'

заголовок http выглядит так:

PUT /avatars/cbe7e51de13c1cf93027ab7e14dbd910.jpg?Expires=1419615226&AWSAccessKeyId={MYKEY}&Signature={MYSIGNATURE} HTTP/1.1\r\n
User-Agent: curl/7.30.0\r\n
Host: mybucket.amazonaws.com\r\n
Accept: */*\r\n
Content-Length: 130485\r\n
 [Content length: 130485]
Expect: 100-continue\r\n
JPEG File Interchange Format

С loopj я отправляю следующее и получаю 403:

PUT /avatars/cbe7e51de13c1cf93027ab7e14dbd910.jpg?Expires=1419615226&AWSAccessKeyId={MYKEY}&Signature={MYSIGNATURE} HTTP/1.1\r\n
Content-Length: 130745\r\n
 [Content length: 130745]
Content-Type: multipart/form-data; boundary=86VaLUGmO9qAjHzA98n9F2K-5G812B\r\n
Host: mybucket.amazonaws.com\r\n
Connection: Keep-Alive\r\n
Accept-Encoding: gzip\r\n
MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "86VaLUGmO9qAjHzA98n9F2K-5G812B"

делая это:

File myFile = new File("image.jpg");
 RequestParams params = new RequestParams();
 params.put("", myFile,"");
 client.put(MyApplication.getAppContext(),user.avatarUploadUrl, params, responseHandler);

Как я могу отправить запрос, например curl, с помощью java (без contenttype, no multipart)? Потому что это работает для меня.

2 ответа

Это сработало для меня:

File myFile = new File(file);
 RequestParams params = new RequestParams();
 params.put("", myFile);
 StringEntity stringEntity = new StringEntity("Content-Length" + String.valueOf(file.length()));
 FileEntity fileEntity = new FileEntity(myFile,"");
 client.put(MyApplication.getAppContext(), user.avatarUploadUrl, fileEntity, null, responseHandler);


Я точно не знаю, как должен выглядеть хост, но я уверен, что с такой реализацией вы можете отправить любой запрос, который вы хотите.

Socket s = new Socket();
 String host = "aws.amazon.com";
 PrintWriter s_out = null;
 BufferedReader s_in = null;

 try
 {
 s.connect(new InetSocketAddress(host , 80));
 System.out.println("Connected");

 //writer for socket
 s_out = new PrintWriter( s.getOutputStream(), true);
 //reader for socket
 s_in = new BufferedReader(new InputStreamReader(s.getInputStream()));
 }

 //Host not found
 catch (UnknownHostException e) 
 {
 e.printStackTrace();
 }

 //Send message to server
 String Request = "your request";


 System.out.println("Request sent...");


 String response;
 while ((response = s_in.readLine()) != null) 
 {
 System.out.println( response );
 }

licensed under cc by-sa 3.0 with attribution.