`

ruby 调用restful接口示例

    博客分类:
  • RUBY
阅读更多
链接参数中添加token
def self.query_products_list
      url = "#{ Settings.aikang_host }/api/v1/sku/instoreCAS?token=#{ Settings.aikang_token }"
      begin
        resp = HTTParty.get(url)
      rescue
        {}
      end
    end


headers中添加Authorization,body中也添加账号密码
def self.stock(sku = [])
      url = "#{Settings.aladdin_host}/index.php/rest/V2/product/stock"
      resp = HTTParty.post(url, body: {sku: sku}.to_json, headers: request_header)
end

# 产品新增
    def self.create
      url = "#{Settings.aladdin_host}/index.php/rest/V2/product/new"
      resp = HTTParty.get(url, headers: request_header)
    end

    def self.order(orders)
      url = "#{Settings.aladdin_host}/index.php/api/http/order"
      secret_token = "Bearer " + Digest::MD5.hexdigest(Settings.aladdin_user_id.to_s + Settings.aladdin_company_code.to_s + Settings.aladdin_access_token.to_s).to_s
      headers = {'Authorization' => secret_token, 'Auth-Code' => Settings.aladdin_company_code.to_s, 'Content-Type' => 'application/json', 'User-Agent' => "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"}
      body = {user: {ald_user_id: Settings.aladdin_user_id.to_s, ald_user_email: Settings.aladdin_user_email.to_s}, orders: orders}
      puts body.to_json
      puts url
      puts headers
      resp = HTTParty.post(url, body: body.to_json, headers: headers)
      JSON.parse resp
    end

private

    def self.request_header
      {'Authorization' => "Bearer #{Settings.aladdin_access_token}", 'Content-Type' => 'application/json'}
    end


body中使用账号和key
module Api
  module Baidu

    def self.get_access_token
      url = "https://aip.baidubce.com/oauth/2.0/token"
      body = {grant_type: 'client_credentials', client_id: Settings.baidu_ocr_api_key, client_secret: Settings.baidu_ocr_secret_key}
      resp = HTTParty.post(url, body: body)
      resp.parsed_response['access_token']
    end

    def self.ocr_idcard(base64_code_image, side = :front)
      url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
      body = { access_token: get_access_token, detect_direction: true, id_card_side: side, image: base64_code_image, detect_risk: true }
      resp = HTTParty.post(url, body: body, headers: {'Content-Type' => 'application/x-www-form-urlencoded'})
      resp.parsed_response
    end

    def self.ocr_business_license(base64_code_image, detect_direction = false)
      url = "https://aip.baidubce.com/rest/2.0/ocr/v1/business_license"
      body = { access_token: get_access_token, image: base64_code_image, detect_direction: detect_direction }
      resp = HTTParty.post(url, body: body, headers: {'Content-Type' => 'application/x-www-form-urlencoded'})
      resp.parsed_response
    end

  end
end


使用账号密码
module Api
  module Dibai

    def self.query_products(current_page, pagesize)
      resp = HTTParty.post("#{Settings.dibo_host}/api/get_products_list", body: {curpage: current_page, pagesize: pagesize}.merge(identity))
      begin
        JSON.parse resp
      rescue
        {"state" => false, "data" => [], "message" => "接口异常", "count" => 0, "pages" => 0}
      end
    end

    def self.query_price(cas)
      resp = HTTParty.post("#{Settings.dibo_host}/api/instant_stock", body: {key_word: cas}.merge(identity))
      begin
        JSON.parse resp
      rescue
        {"state" => false, "packing_count" => 0, "data" => [], "message" => "接口异常"}
      end
    end

    private

    def self.identity
      {username: Settings.dibo_username, password: Settings.dibo_password}
    end

  end

end


添加时间参数的直接url+账户id
def self.query_products(startdate, current_page = 1, pagesize = 10000)
      key = Digest::MD5.hexdigest(startdate + 'jkchemical').upcase
      url = "#{Settings.bailingwei_host}/WebService/ThirdPartyPlatform/ThirdPartyPlatformServiceHandler.ashx?key=#{ key }&startDate=#{ startdate }&pageIndex=#{ current_page }&pageSize=#{ pagesize }&thirdPartyPlatformId=6823432af42d244d8926f"
      res = HTTParty.get(url)
      begin
        JSON.parse res
      rescue
        {}
      end
end


在body中加md5内容密码参数验证
# 产品查询
    def self.query_product(cas)
      url = "#{Settings.macklin_host}/api/attachs/products"
      body = {attachs_code: Settings.macklin_username, timestamp: Time.now.to_datetime.strftime("%Q"), cas: cas.to_s.strip}
      body[:signcode] = signature(body)
      begin
        resp = HTTParty.post(url, body: body)
        resp["msg"]["items"]
      rescue
        []
      end
end

# 签名
    def self.signature(params)
      str = params.keys.sort.map{|k| params[k]}.join('').to_s + Settings.macklin_password.to_s
      Digest::MD5.hexdigest str
    end



url中,查询信息+密码后再md5加密的key
def self.query_product(product_no)
      key = "#{ Settings.meryer_secret }KEYWYeAdcaDXQproductCode#{ product_no }#{ Settings.meryer_secret }"
      sign = Digest::MD5.hexdigest(key).upcase
      url = "#{ Settings.meryer_host }/api/getpro.ashx?KEY=WYeAdcaDXQ&productCode=#{ product_no }&SIGN=#{ sign }"
      begin
        resp = HTTParty.get(url)
        JSON.parse resp
      rescue
        {}
      end
 end


时间token加到headers
module Api
  module Qichacha

    def self.get_enterprise_detail(keyword)
      daily_max_count = Lookup.find_by(code: :qichacha_daily_request_max_count)&.name.to_i
      counter = Counter.find_or_create_by(usage: "http://i.yjapi.com/ECIV4/GetDetailsByName", entity_type: "Employee", entity_id: 1, key: Time.now.strftime("%Y%m%d000000"))
      if counter.count < daily_max_count
        url = "http://api.qichacha.com/ECIV4/GetDetailsByName?key=#{Settings.qichacha_key}&keyword=#{keyword.to_s.strip}"
        timespan = Time.now.to_i.to_s
        token = Digest::MD5.hexdigest(Settings.qichacha_key.to_s + timespan + Settings.qichacha_secret_key).upcase
        resp = HTTParty.get(url, headers: {"Token" => token, "Timespan" => timespan})
        counter.incr! if resp["Status"].to_i == 200
        return resp
      else
        return { "Status" => "over limit"}
      end
    end

  end
end

分享到:
评论

相关推荐

    各种开发语言示例调用HTTP接口(示例中默认HTTP接口编

    HTTP接口通常指的是通过HTTP协议暴露出来的一组可供其他程序调用的API,这些API可以是RESTful风格的,也可以是SOAP等其他格式。 GB2312是一种简体中文字符集,主要用于早期的中文系统。在现代的互联网环境中,...

    Ruby - NetHTTP实现短信验证码注册登录完整示例:Ruby - NetHTTP.rb和附件说明.rar

    在这个示例中,我们将探讨如何利用Net::HTTP库来构建一个简单的验证系统。 首先,让我们理解短信验证码的原理。短信验证码是一种安全机制,通常用于身份验证或防止欺诈行为。用户在注册或登录时,系统会向他们的...

    Ruby-RESTClient简单的HTTP和Ruby的REST客户端

    Ruby-RESTClient是一个轻量级、易于使用的库,专门用于执行HTTP和RESTful API调用。这个库使得在Ruby环境中进行Web服务交互变得极其简单,是开发者进行API测试和集成时的常用工具。RESTClient提供了丰富的功能,可以...

    ruby on rails 教程源码

    这将帮助你掌握Rails的核心概念,包括RESTful设计原则、ActiveRecord查询接口、TDD(测试驱动开发)方法等。 总之,Ruby on Rails提供了一种优雅的方式来构建Web应用,它的约定优于配置的理念减少了大量重复的代码...

    Ruby-Jbuilder通过一个构建式DSL创建JSON结构

    在这个例子中,`json.`是Jbuilder DSL的起始关键字,后面的每个方法调用都会在JSON对象中添加一个键值对。`@user`是Ruby中的实例变量,它包含了User模型的数据。 Jbuilder也支持嵌套结构,这对于表示层级关系的数据...

    Ruby语言中文教程.rar

    - 在这个中文教程中,你将有机会阅读和理解真实的Ruby代码示例,有助于巩固理论知识并提升实践技能。 本教程适合对编程有一定了解,希望学习一种新的动态语言的读者。通过学习,你可以掌握Ruby的基本概念,理解其...

    ruby-couch-db-源码.rar

    总结来说,ruby-couch-db是Ruby开发者与CouchDB数据库交互的重要工具,其源码揭示了如何通过Ruby语言优雅地封装CouchDB的RESTful API,实现对数据库的各种操作。通过深入理解其内部机制,开发者可以更加熟练地使用这...

    ruby on rails 实例depot

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率,简化Web应用开发流程。Depot是一个经典的Rails教程示例项目,它展示了如何...

    Ruby on Rails敏捷开发最佳实践源代码

    这个压缩包包含了“Ruby on Rails敏捷开发最佳实践”一书中的所有源代码示例,这些代码实例深入浅出地展示了如何运用Rails框架进行高效、灵活的Web应用开发。 在Ruby on Rails中,"敏捷开发"意味着快速响应变化,...

    jsgrid-rails:带有Ruby on Rails REST服务的jsgrid的示例项目

    `jsgrid-rails` 是一个示例项目,它演示了如何将流行的轻量级JavaScript数据网格库 `jsGrid` 与 Ruby on Rails 框架集成,通过RESTful API 提供数据服务。该项目的目标是展示在Web应用中实现动态、交互式的数据操作...

    Ruby-Jsonite为你的RubyAPIs提供一个微小兼容HAL的JSONpresenter

    Ruby是一种动态、面向对象的脚本语言,广泛用于Web开发,尤其在构建RESTful API时。在Ruby中,为了提供结构化的数据交换格式,JSON(JavaScript Object Notation)经常被用作API的数据载体。HAL(Hypertext ...

    前端示例和后端代码库的集合和规范

    它涵盖了从用户界面到数据库的所有方面,提供了前端和后端的实现,包括但不限于React、Vue、Angular等前端框架,以及Node.js、Django、Ruby on Rails等后端框架。 在JavaScript开发中,"其它杂项"标签可能指的是这...

    Agile.Web.Development.with.Rails.4(2013.10).Sam.Ruby.文字版.pdf 一书的配套代码

    这本书的配套代码提供了丰富的示例和练习,帮助读者深入理解Rails的运作机制。 在Rails框架中,我们主要涉及以下几个核心知识点: 1. **MVC架构**:Rails基于Model-View-Controller(MVC)设计模式,将应用程序...

    go-rubychina:go-rubychina

    8. **示例代码的使用**:"main.go" 示例代码展示了如何初始化和使用 "go-rubychina" 库。通过阅读和理解这个示例,开发者可以快速上手。 9. **API 设计原则**:良好的 API 设计应遵循 RESTful 原则,包括使用 HTTP ...

    Ruby-Knock为RailsAPI实现无缝JWT身份验证

    Ruby是一种面向对象的编程语言,尤其在Web开发领域中,Ruby on Rails(简称Rails)框架因其高效、简洁和灵活性而受到广泛欢迎。Rails是构建Web应用程序的利器,它提供了许多内置的功能来简化开发过程,包括身份验证...

    Ruby

    在提供的压缩包文件"rubrica-gal-master"中,可能是一个开源项目或者示例代码库,但由于没有具体的上下文,我们无法详细讨论其内容。通常,一个项目名可能包含项目的核心功能或主题,"rubrica"在意大利语中意为...

Global site tag (gtag.js) - Google Analytics