c# - 带有 JSON 有效负载正文的 HTTP 帖子,其中包含使用 cURL 的空行
问题描述
我通过 cURL 将 json 有效负载发送到服务器后端(.NET .ashx (c#) 处理程序),如下所示:
curl -X POST -d@filename.txt http://localhost:49797/Handler.ashx -H "Content-Type:application/json"
JSON(位于 filename.txt 中)中有一个空行(如果你们中的任何人从https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html认出它我用来验证我的 AWS4 签名代码)
{ "expiration": "2015-12-30T12:00:00.000Z",
"conditions": [
{"bucket": "sigv4examplebucket"},
["starts-with", "$key", "user/user1/"],
{"acl": "public-read"},
{"success_action_redirect":"http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-meta-uuid": "14365123651274"},
{"x-amz-server-side-encryption": "AES256"},
["starts-with", "$x-amz-meta-tag", ""],
{"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"},
{"x-amz-algorithm": "AWS4-HMAC-SHA256"},
{"x-amz-date": "20151229T000000Z" }
]
}
我正在服务器上按如下方式读取有效负载:
private string getPayloadString(HttpRequest Request)
{
string documentContents;
using (Stream receiveStream = Request.InputStream)
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
documentContents = readStream.ReadToEnd();
}
}
return documentContents;
}
当我在 Visual Studio 中检查“documentContents”时,我基本上得到一个字符串,如下所示:
{ "expiration": "2015-12-30T12:00:00.000Z", "conditions": [ {"bucket": "sigv4examplebucket"}, ["starts-with", "$key", "user/user1/"], {"acl": "public-read"}, {"success_action_redirect": "http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html"}, ["starts-with", "$Content-Type", "image/"], {"x-amz-meta-uuid": "14365123651274"}, {"x-amz-server-side-encryption": "AES256"}, ["starts-with", "$x-amz-meta-tag", ""], {"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"}, {"x-amz-algorithm": "AWS4-HMAC-SHA256"}, {"x-amz-date": "20151229T000000Z" } ]}
反过来,当我base64Encode它与AWS页面上的预期值不匹配时(如果我在编码之前对我的服务器代码中的字符串进行硬编码,它确实匹配)
我的问题是
- 我在读取有效负载的方式是否丢失了空白行?如果是这样,我该怎么做?
- cURL 发送的数据是否与我的 txt 文件中的数据完全相同?
- 当我在文本可视化器中查看它时,它只是 Visual Studio 将其剥离吗?
谢谢,这个来自 AWS 的签名不匹配错误让我很头疼!
解决方案
我建议使用 --data-binary 和 curl 来维护换行符。
从这里https://ec.haxx.se/http-post.html
POSTing binary 从文件中读取时,-d 将去掉回车符和换行符。如果您希望 curl 完全按照给定的二进制格式读取和使用给定文件,请使用 --data-binary:
curl --data-binary @filename http://example.com/
推荐阅读
- python - groupby 上的 Numpy 渐变
- php - Can't perform POST requests in Laravel test for API routes
- python - 有没有办法从 Python 中的特定单元格开始编写数据帧
- flutter - [Flutter][BLoC] 返回上一个小部件时出错
- python - 当我使用烧瓶 + uwsgi + nginx 将烧瓶部署到服务器时,多进程无法在烧瓶中工作
- android - React Native Video,如何动态更改源?
- python - 从较大列表中提取子列表后,如何获取列表中元素的跨度?
- php - 聊天消息以相反的顺序显示
- ruby - Ruby - 获取本地文件的 UNC 路径
- r - 根据其他变量是否为“是”,使用“是/否”创建新变量。变异?