**TL;DR:**我必须发出一个HTTP post请求,这在CURL中可以工作,但在ruby中不行。
如果我从终端使用CURL(使用Ubuntu)
curl https://api.kite.trade/session/token \
-H "X-Kite-Version: 3" \
-d "api_key=XXX" \
-d "request_token=XXX" \
-d "checksum=XXX"
字符串
上面的CURL请求可以工作,我也可以得到响应。但是如果我尝试在ruby中使用HTTP gem,它就不工作了。
response = http.headers("X-Kite-Version"=>"3").post(
"https://api.kite.trade/session/token",
body: ("api_key=" + @api_key +"\n\r" "request_token=" + @request_token +"\n\r" "checksum=" + checksum_hash.to_s)
)
型
我尝试了使用"\n"
,"\n\r"
的不同组合。我尝试将.html_safe放在"("api_key=" + @api_key +"\n\r" "request_token=" + @request_token +"\n\r" "checksum=" + checksum_hash.to_s)"
之后。
我尝试了下面的方法:
params = [["api_key","XXX"],["request_token","XXX"],["checksum","XXX"]]
型
我尝试对上述参数进行URI编码,并将其传递到http请求的“body”参数中。但是它不起作用。
在大多数情况下,当我尝试使用HTTP gem调用时,我会得到下面的错误消息-
{“status”:“error”,“message”:“api_key
的长度应至少为6个字符",“data”:null,“error_type”:“InputException”}
最有可能的是数据没有以服务器API能够理解的方式传递。而且我对服务器API没有任何控制。
1条答案
按热度按时间jm81lzqq1#
cURL的
-d
选项在POST请求中将指定的数据发送到服务器,就像浏览器在用户填写HTML表单时所做的那样。这在Ruby中翻译为
set_form_data
,如下所示:字符串