Запрос 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.