Java 使用RestTemplate复制精确的CURL请求
在将文件上载到AWS S3时,我很难尝试使用RestTemplate复制curl命令 下面的curl工作得很好,但是当使用rest模板时,这不起作用,因为它在内部改变了一些字符Java 使用RestTemplate复制精确的CURL请求,java,spring,spring-boot,curl,Java,Spring,Spring Boot,Curl,在将文件上载到AWS S3时,我很难尝试使用RestTemplate复制curl命令 下面的curl工作得很好,但是当使用rest模板时,这不起作用,因为它在内部改变了一些字符 curl -v \ -H "Content-Type:application/octet-stream" \ -H "Content-Length:5242880" \ --upload-file /Users/fd/Downloads/xaa \ 'https://video-uplo
curl -v \
-H "Content-Type:application/octet-stream" \
-H "Content-Length:5242880" \
--upload-file /Users/fd/Downloads/xaa \
'https://video-uploads-prod.s3-accelerate.amazonaws.com/ABCDEFQGfwwGyO2DKbQ/aws-userUploadedVideo?uploadId=qkpiUI.3zRrO6N0K2ThRJNEjeCJ90xKm5GvLyt92bGvn_CgHSRohbuVcPxubnHs5UhtIF2m.92umUHS1ScLxHT09ObrtYsDNKoPCYMtX.og5GH2jJFJzTwowHPR2NATP&partNumber=1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20200108T153659Z&X-Amz-SignedHeaders=content-length%3Bcontent-type%3Bhost&X-Amz-Expires=86399&X-Amz-Credential=ABCDEZHLABCWZ2MUPPBQ%2F20200108%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=abcde94e1a87d2169ce000d5b1275d422c66360136e0488d9714db4f12199740'
旋度输出为:
* We are completely uploaded and fine
< HTTP/1.1 200 OK
我尝试了多种使用restemplate.exchange
的方法,比如使用UriComponentsBuilder
而不是普通的url
字符串,使用URI,使用解码的url
字符串,但没有办法调用文本url,也没有办法避免restemplate修改url
我知道我可以从Java调用
curl
命令,但我想知道如何使用RestTemplate调用文本url来复制curl的确切行为,并避免RestTemplate修改它。这是可能的还是我无法使用RestTemplate实现此目的?已删除。所以Java
正在抱怨正确的键不起作用?你可以发布有什么区别(如果有)。@l'l'l问题是,restemplate.exchange
在内部修改url
,它执行一个内部编码来破坏url,而curl按原样使用,因此不同签名的错误被删除。所以Java
正在抱怨正确的键不起作用?你可以发布有什么不同(如果有的话)。@l'l'l问题是restemplate.exchange
在内部修改url
,它执行内部编码来破坏url,而curl按原样使用,因此不同签名的错误
byte[] media = //video in mp4//;
String uploadUrl = "https://video-uploads-prod.s3-accelerate.amazonaws.com/ABCDEFQGfwwGyO2DKbQ/aws-userUploadedVideo?uploadId=qkpiUI.3zRrO6A0B2ThRCDEjeCJ90xKm5GvLyt92bGvn_CgHSRohbuVcPxubnHs5UhtIF2m.92umUHS1ScLxHT09ObrtYsDNKoPCYMtX.og5GH2jJFJzTwowHPR2NATP&partNumber=1&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20200108T153659Z&X-Amz-SignedHeaders=content-length%3Bcontent-type%3Bhost&X-Amz-Expires=86399&X-Amz-Credential=ABCDEZHLABCWZ2MUPPBQ%2F20200108%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=abcde94e1a87d2169ce000d5b1275d422c66360136e0488d9714db4f12199740";
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(APPLICATION_OCTET_STREAM);
headers.set("Content-Length", "5242880");
HttpEntity entity = new HttpEntity<>(media, headers);
ResponseEntity<String> respEntity = restTemplate.exchange(uploadUrl, PUT, entity, String.class);
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>ABCDEFQGfwwGyO2DKbQ</AWSAccessKeyId>...