【问题标题】:How do I properly set the request header of a Rhomobile API call?如何正确设置 Rhomobile API 调用的请求标头?
【发布时间】:2013-09-16 13:16:55
【问题描述】:

环境:

Windows Server 2012 标准版
rhodes-3.5.1.13 - 摩托罗拉RhoMobileSuite2.2.1.13
jQuery Mobile 1.6.4
Java jdk1.6.0_24

说明: 打完这个电话后..

Rho::AsyncHttp.get( :url => 网址, :标题=> { '接受'=>'应用程序/json', '接受编码'=>'gzip,deflate,sdch', '接受语言'=>'en-US,en;q=0.8' }, :callback => 回调, :callback_param => 回调参数 )

...这个请求的结果返回如下:

"Rho::AsyncHttp..callback_param)" {"rho_callback"=>"1", "status"=>"error", "error_code"=>"1", "headers"=>{"Accept"= >"application/json", "Accept-Encoding"=>"gzip,deflate,sdch", "Accept-Language"=>"en-US,en;q=0.8", "User-Agent"=>"Mozilla -5.0 (ANDROID; Win32; 4.0.3)"}, "body"=>""}

问题: 允许我传递给此调用的标头是否存在 Rhomobile 限制?如果我将带有标题的 url 粘贴到 Fiddler 中,它似乎可以工作。当我删除 'Accept-Encoding'=>'gzip,deflate,sdch' 时,响应是一样的。

提前致谢。

【问题讨论】:

    标签: api get rhomobile


    【解决方案1】:

    Rhodes 使用 libcURL 在框架的 v3.5 中实现 AsyncHTTP API,这可以在 sourcecode 中看到。

    所以在 libcURL 中可以做的任何事情,在 ASyncHTTP 中都可以做。

    在您的特定情况下,我可能会使用“Content-Type”而不是“Accept”标头:

     Rho::AsyncHttp.get( 
        :url => url, 
        :headers => { 
        'Content-Type'=>'application/json', 
        'Accept-Encoding'=>'gzip,deflate,sdch', 
        'Accept-Language'=>'en-US,en;q=0.8' 
        }, 
        :callback => callback, 
        :callback_param => callback_param 
        ) 
    

    如果您想在 Rhodes v4.0 中对此进行测试,现在可以使用相同方式使用的 Network API:

    getProps = Hash.new
    getProps['url'] = url
    getProps['headers'] = {"Content-Type" => "application/json",
                           "Accept-Encoding"=>"gzip,deflate,sdch", 
                           "Accept-Language"=>"en-US,en;q=0.8"}
    Rho::Network.get(getProps, url_for(:action => :callback))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多