Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
Java 使用RestTemplate复制精确的CURL请求_Java_Spring_Spring Boot_Curl - Fatal编程技术网

Java 使用RestTemplate复制精确的CURL请求

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

在将文件上载到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-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>...