bad URI(is not URI?)

网址中的汉字无法直接解析,需要先encode才行, 看报错说明

irb(main):043:0> url="http://10.103.xx.xx/cms/api/module/data?name=资讯频道战略观察子频道&appkey=300&timestamp=1412997443&sign=72c7de8c0cf6c5e5ca0aaa11a56e6223"
=> "http://10.103.xx.xx/cms/api/module/data?name=资讯频道战略观察子频道&appkey=300&timestamp=1412997443&sign=72c7de8c0cf6c5e5ca0aaa11a56e6223"
irb(main):044:0> response = RestClient.get(url)
URI::InvalidURIError: bad URI(is not URI?): http://10.103.xx.xx/cms/api/module/data?name=资讯频道战略观察子频道&appkey=300&timestamp=1412997443&sign=72c7de8c0cf6c5e5ca0aaa11a56e6223
/root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/uri/common.rb:176:in `split‘: bad URI(is not URI?): http://10.103.xx.xx/cms/api/module/data?&appkey=300&timestamp=1412933099&sign=7ddbc7e9d8cc9858abaf5495b0482d09 (URI::InvalidURIError)

safeurl = URI.encode(url.strip)

response = RestClient.get(safeurl)

irb(main):047:0> safeurl.class
=> String

==============

注意再转一遍就改变类型了

irb(main):048:0> aaa= URI.parse(URI.encode(url.strip))
=> #<URI::HTTP:0x0000000714a008 URL:http://10.103.xx.xx/cms/api/module/data?name=%E8%B5%84%E8%AE%AF%E9%A2%91%E9%81%93%E6%88%98%E7%95%A5%E8%A7%82%E5%AF%9F%E5%AD%90%E9%A2%91%E9%81%93&appkey=300&timestamp=1412997443&sign=72c7de8c0cf6c5e5ca0aaa11a56e6223>
irb(main):049:0> aaa.class
=> URI::HTTP
irb(main):050:0>  response = RestClient.get(aaa)
NoMethodError: undefined method `match‘ for #<URI::HTTP:0x0000000714a008>
    from /home/wangzheng/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/rest-client-1.7.2/lib/restclient/request.rb:275:in `parse_url‘
    from /home/wangzheng/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/rest-client-1.7.2/lib/restclient/request.rb:280:in `parse_url_with_auth‘
    from /home/wangzheng/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/rest-client-1.7.2/lib/restclient/request.rb:175:in `execute‘
    from /home/wangzheng/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/rest-client-1.7.2/lib/restclient/request.rb:41:in `execute‘
    from /home/wangzheng/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/rest-client-1.7.2/lib/restclient.rb:65:in `get‘
    from (irb):50
    from /home/wangzheng/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/railties-3.0.8/lib/rails/commands/console.rb:44:in `start‘
    from /home/wangzheng/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/railties-3.0.8/lib/rails/commands/console.rb:8:in `start‘
    from /home/wangzheng/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/railties-3.0.8/lib/rails/commands.rb:23:in `<top (required)>‘
    from script/rails:7:in `require‘
    from script/rails:7:in `<main>‘
时间: 2024-10-29 01:10:21

bad URI(is not URI?)的相关文章

Uri.AbsoluteUri 与 Uri.ToString() 的区别

UriBuilder builder = new UriBuilder("http://somehost/somepath"); builder.Query = "somekey=" + HttpUtility.UrlEncode("some+value"); Uri someUri = builder.Uri; Response.Write("" + someUri.AbsoluteUri + "");

Android Uri、UriMatcher、ContentUris详解

1.Uri 通用资源标志符(Universal Resource Identifier, 简称"URI"). Uri代表要操作的数据,Android上可用的每种资源 - 图像.视频片段等都可以用Uri来表示. URI一般由三部分组成: 访问资源的命名机制. 存放资源的主机名. 资源自身的名称,由路径表示. Android的Uri由以下三部分组成: "content://".数据的路径.标示ID(可选) 举些例子,如: 所有联系人的Uri: content://con

URI,URL,URN

首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源.而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源.而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:[email protected].也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则

利用注解来保存uri

一直对getRequestURI()与getRequestURL()理解不透彻,因此今天通过查找资料,现将些许收获分享一下: [非原创]代码搬运工..(*^__^*) 1.request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/" http://www.baidu.com:8080/web/in

UriMatcher uri选择器

选择器是为了让其他应用把传递进来的uri进行分类,来确定要操作哪个表, 首先要声明UriMatcher static UriMatcher um = new UriMatcher(UriMatcher.NO_MATCH);参数固定 然后在静态块里进行匹配规则的说明 // 在块里确定匹配规则, // 第一个参数为主机名,之后是表名,之后是结果码,一般1开始 um.addURI("com.hello.demo", "people", 1); um.addURI(&quo

CodeIgniter源码分析之URI.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); // ------------------------------------------------------------------------ /** * URI Class */ class CI_URI { /** * List of cached uri segments */ var $keyval = array(); /** *

android如何获取一个SD卡指定文件夹的图片Uri uri问题

============问题描述============ String a="file://"+Environment.getExternalStorageDirectory().getPath()+"/dcim/Camera/"; //  File baseFile = new File(a+"/dcim/Camera/15.jpg"); //  Uri uri =  Uri.fromFile(baseFile) ; //  Uri uri =

URI、URL、URN介绍

注:1. 仅从http(Hypertext Transfer Portocol)角度阐述,不涉及语言层面的类库. 2. 以下内容均参考<Http权威指南>一书. 一.万维网构成 Web内容都是存储在Web服务器上的.Web服务器所使用的是HTTP 协议,因此经常会被称为HTTP服务器.这些HTTP 服务器存储了因特网中的数据,如果HTTP 客户端发出请求的话,它们会提供数据.客户端向服务器发送HTTP 请求,服务器会在HTTP 响应中回送所请求的数据,参看下图: HTTP请求向Web服务器请求

URI、URL 和 URN

URI 是统一资源 标识符,而 URL 是统一资源 定位符.因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL.这是因为 URI 还包括一个子类,即统一资源 名称 (URN),它命名资源但不指定如何定位资源.上面的 mailto. news 和 isbn URI 都是 URN 的示例. URI 和 URL 概念上的不同反映在此类和 URL 类的不同中. 此类的实例代表由 RFC 2396 定义的语法意义上的一个 URI 引用.URI 可以是绝对的,也可以是相对的.对