linux 脚本 转义,替换为转义的shell字符串?

要解决你的问题,你必须小心逃避一切

Shellwords.escape

然后不引用它们。

<

curl -s "#{CANVAS_URI}/api/v1/courses/#{COURSE_ID}/quizzes/#{quiz_id}/questions" \

-X POST \

-H "Content-Type: application/json" \

-d #{Shellwords.escape(myJson)} \

-H "Authorization: Bearer #{CANVAS_TOKEN}"

SHELL

但这是乏味和容易出错的,并不是你真正的问题。

整个过程就是在ruby中发布嵌套json的解决方案。平面json在大多数http gems中都可以工作,但是很少需要嵌套json,恐怕大多数gems都没有针对它进行测试……

嵌套的json并不少见,而且http客户端不应该关心json的内容。它只是在传送一根弦。

您的json格式不正确。具体如下:

"comments_html": "

Please post your questions to a discussion.

"

你有一个没有替罪羊的引语。这可能是因为您手工将嵌套的json组合在一起。就像脱壳卷曲一样,这很容易出错。

相反,创建一个ruby散列并将其转换为json。然后你就可以得到ruby语法检查的所有好处。

payload = {

question: {

question_type: "multiple_choice_question",

question_text: "

Is everything clear?

",

points_possible: 1,

answers: [

{

text: "I read and understood",

html: "",

weight: 100

}, {

text: "I have questions",

comments_html: %Q[

Please post your questions to a discussion.

],

weight: 0

}

]

}

}

require "json"

json_payload = JSON.generate(payload)

而不是打电话

curl

,使用http库。因为您调用的是rest api,所以可以使用

RestClient

.

require "rest-client"

response = RestClient.post(

"#{CANVAS_URI}/api/v1/courses/#{COURSE_ID}/quizzes/#{quiz_id}/questions",

json_payload,

{ content_type: :json, authorization: "Bearer #{CANVAS_TOKEN}" }

)

或者,更好的是,使用

canvas-api gem

它负责json转换,并可以利用api特性,比如分页。

canvas = Canvas::API.new(:host => CANVAS_URI, :token => CANVAS_TOKEN)

response = canvas.post(

"/api/v1/courses/#{COURSE_ID}/quizzes/#{quiz_id}/questions",

payload

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值