是否有红宝石卷曲库,允许我复制此请求:
curl -d '<hello xmlns="http://checkout.google.com/schema/2"/>' https://S_MERCHANT_ID:S_MERCHANT_KEY@sandbox.google.com/checkout/api/checkout/v2/request/Merchant/S_MERCHANT_ID
我尝试过curb,但是他们的PostField.content类没有与google的checkout api合作。这是我的路边请求中的代码:
c = Curl::Easy.new("https://MY_ID:MY_KEY@sandbox.google.com/checkout/api/checkout/v2/request/Merchant/MY_ID_AGAIN")
c.http_auth_types = :basic
c.username = 'MY_ID'
c.password = 'MY_KEY'
# c.headers["data"] = '<?xml version="1.0" encoding="UTF-8"?><hello xmlns="http://checkout.google.com/schema/2"/>'
c.http_post(Curl::PostField.content('', '<?xml version="1.0" encoding="UTF-8"?><hello xmlns="http://checkout.google.com/schema/2"/>'))
c.perform
我已经设法使用ruby的系统命令让它工作,但我不知道如何处理它的响应。
req = system("curl -d '<hello xmlns=\"http://checkout.google.com/schema/2\"/>' https://MY_ID:MY_KEY@sandbox.google.com/checkout/api/checkout/v2/request/Merchant/MY_ID")
我已经在这里待了2个小时了。任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
您可以使用IO.popen
来读取子进程:
IO.popen(['curl', '-o', '-', '-d', ..., err: [:child, :out]]) do |io|
response = io.read
end
此示例将标准输出和标准错误合并到子进程中的一个流中,并强制curl通过-o
将输出重定向到标准输出。您可以指定其他选项来代替...
。
答案 1 :(得分:1)
我总是将Rest Client gem用于此类用例,它使用起来非常简单,所有REST请求都是开箱即用的整批调优参数。
您的代码看起来与此类似:
url = "sandbox.google.com/checkout/api/checkout/v2/request/Merchant/#{S_MERCHANT_ID}"
credentials = "#{S_MERCHANT_ID}:#{S_MERCHANT_KEY}"
RestClient.post "https://credentials@#{url}", '<hello xmlns="http://checkout.google.com/schema/2"/>'
答案 2 :(得分:0)
或者,您可以使用HTTP请求库,例如Typheous(https://github.com/typhoeus/typhoeus)。有没有什么可以让你“卷曲”?
答案 3 :(得分:0)
我会把结果放在一个文件中,然后使用ruby打开文件并读取它(File.open)
或者我们httparty
答案 4 :(得分:0)
我想通了(YAAAAY!)
如果有其他人遇到这个问题,这就是解决方案。
可执行命令在命令行中运行正常,但如果您尝试从rails中的控制器呈现可执行命令的输出,请确保使用render:json而不是render:text来打印结果。
由于某种原因,渲染:文本只输出我命令输出的一些部分(并在此过程中让我疯狂)。
对于那些尝试与Google中的Google Checkout集成的人,以下是您向Google发送http请求的方式:
第一步:将rest-client添加到您的Gemfile中。以下是如何从命令行执行此操作:
$ cd /path/to/your/rails/app
$ sudo nano Gemfile
接下来,通过将以下内容放在Gemfile
中,将gem添加到gem文件中$ gem "rest-client"
接下来,运行bundle install
$ bundle install
重新启动服务器。如果是apache2:
$ sudo service apache2 reload
如果webrick:
$ rails s
然后,在您的控制器中(假设您已设置了rails并且能够从浏览器访问控制器),请编写以下代码:
$ url = "https://YOUR_GOOGLE_CHECKOUT_MERCHANT_ID:YOUR_GOOGLE_CHECKOUT_KEY@sandbox.google.com/checkout/api/checkout/v2/request/Merchant/YOUR_GOOGLE_CHECKOUT_MERCHANT_ID"
$ req = RestClient.post(url, '<hello xmlns="http://checkout.google.com/schema/2"/>')
render :json => req
请不要忘记将YOUR_GOOGLE_MERCHANT_ID替换为您的实际商家ID,并将YOUR_GOOGLE_CHECKOUT_KEY替换为您的实际Google Checkout密钥
<?xml version="1.0" encoding="UTF-8"?>
<bye xmlns="http://checkout.google.com/schema/2" serial-number="1dfc3b90-1fa6-47ea-a585-4d5482b6c785" />
(由nexo提供答案)