【发布时间】:2017-01-08 11:24:36
【问题描述】:
如何将此 curl 命令转换为 restsharp?
curl -X POST \
--header "Authorization: Bearer SomeToken" \
--header "_Id: SomeId" \
--data-urlencode 'keys: name, age' \
https://api.SomeDomain.com/object-storage/classes/query/Player
我试过这个:
RestClient client = new RestClient("https://api.SomeDomain.com");
RestRequest request = new RestRequest("/object-storage/classes/query/hotels", Method.POST);
request.AddHeader("_Id", "SomeId");
request.AddHeader("Authorization", "Bearer " + SomeToken);
request.AddParameter("application/json", "{\"keys\" : \"name\" ,\"age\"}");
var response = client.Execute(request);
我不知道如何转换这一行:
--data-urlencode 'keys: name, age' \
编辑 1:
好的,正如@Evk 所说,我尝试了 curl commond :
curl -X POST \
--header "Authorization: Bearer SomeToken" \
--header "X-Backtory-Object-Storage-Id: SomeId" \
--data-urlencode 'keys:Name' \
--trace-ascii /dev/stdout
https://api.backtory.com/object-storage/classes/query/hotels
这是跟踪打印的内容:
=> Send header, 908 bytes (0x38c)
0000: POST /object-storage/classes/query/hotels HTTP/1.1
0034: Host: api.backtory.com
004c: User-Agent: curl/7.52.1
0065: Accept: */*
0072: Authorization: Bearer SomeToken
030d: X-Backtory-Object-Storage-Id: SomeId
0345: Content-Length: 17
0359: Content-Type: application/x-www-form-urlencoded
038a:
=> Send data, 17 bytes (0x11)
0000: %27keys%3AName%27
和错误:
{
"timestamp" : "2017-01-13T13:59:29.883UTC",
"status" : 500,
"error" : "Internal Server Error",
"exception" : "com.google.gson.JsonSyntaxException",
"message" : "org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 19 path $",
"path" : "/classes/query/hotels"
}
对于更多细节,我无法控制服务器端!
【问题讨论】:
-
keys: name, age看起来像简单的文本,由 curl 进行 url 编码。因此,您必须对此文本进行编码并将其作为查询正文传递。并且,可能还要设置“Content-Type: application/x-www-form-urlencoded”标头。 -
@GeorgeSovetov 谢谢,但我不明白你的意思。 request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("application/json", "{\"keys\" : \"name\" , \"age\"}");
-
这里是发布数据的方法:stackoverflow.com/a/21406569/1833960。但是您需要另一种内容类型。
-
不确定但可以试试这个 request.addparameter("application/x-www-form-urlencoded", HttpUtility.HtmlEncode("key:name,age"), ParameterType.RequestBody) 而不是request.AddParameter("application/json","{\"keys\" : \"name\" ,\"age\"}");
-
@AllenKing 我试过 Html Encode ... 没用
标签: c# php rest curl restsharp