我试图使用Net :: HTTP向Twitter发送GET请求(因隐私原因而替换用户ID):
url = URI.parse("http://api.twitter.com/1/friends/ids.json?user_id=12345")
resp = Net::HTTP.get_response(url)
Run Code Online (Sandbox Code Playgroud)
这会在Net :: HTTP中引发异常:
NoMethodError:未定义的方法
empty?' for #<URI::HTTP:0x59f5c04> from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1470:in初始化'
巧合的是,我偶然发现了一个类似的代码片段,URI.encode之前使用过URI.parse,所以我复制了它并再次尝试:
url = URI.parse(URI.encode("http://api.twitter.com/1/friends/ids.json?user_id=12345"))
resp = Net::HTTP.get_response(url)
Run Code Online (Sandbox Code Playgroud)
现在它工作正常,但为什么?有迹象表明,需要在逃避我提到的网址没有保留字符,所以为什么我要调用URI.encode的get_response成功吗?
我们目前正在开展I18N项目.我想知道在URL中使用非ascii字符有什么复杂性.如果不可取,有什么办法可以解决这个问题?
编辑(回应Maxym的回答):该网站将成为特定国家的本地网站,我不必担心全世界公众访问该网站.我明白从可用性的角度来看,这真的很烦人.与此相关的其他技术问题是什么?
language-agnostic url ascii internationalization url-encoding
我使用URLCodec的Apache的百科全书编解码器编码的网址,但其编码空间,+还不如%20
为什么?什么是解决方案?
我目前正在创建一组包含以下代码的链接:
BookmarkablePageLink<CheeseMain> havarti =
new BookmarkablePageLink<CheeseMain>("havarti", CheeseMain.class);
havarti.setParameter("Title", "Havarti");
havarti.setParameter("Group", "cheeseName");
add(havarti);
Run Code Online (Sandbox Code Playgroud)
出来的URL具有格式
https://mysite.com/;jsessionid=B85EE5CB0349CCA2FE37AF76AB5C30C1?wicket:bookmarkablePage=:com.mycompany.cheese.CheeseMain&Title=Havarti&group=cheeseName.
我的问题是我不再希望此链接的URL是可收藏的.理想情况下,我希望它是一个简单的东西https://mysite.com/cheese,但我可以忍受一个丑陋的URL.重要的是参数不可见.
我应该如何改变我生成链接的方式?我查看了Wicket提供的不同URL编码策略,但没有一个删除参数; 他们只是以不同的方式展示
ASP.NET MVC3/Razor.
我发现当我创建一个动作链接时,比如说:
@Html.ActionLink(product.Title, "Detail", "Products", new { id = product.ProductID }, null)
Run Code Online (Sandbox Code Playgroud)
MVC3引擎创建我的产品链接.例如:
http://myhost/{ActionUrl}/PRODID
Run Code Online (Sandbox Code Playgroud)
但是,如果我的产品ID包含任何特殊字符,则不会对其进行URL编码.
http://myhost/{ActionUrl}/PROD/ID
Run Code Online (Sandbox Code Playgroud)
当然,这打破了我的路由.我的问题是:
谢谢!
我想用Ruby编码一个URL参数.未编码的URL参数如下所示:
index.php?hash=tlNmgzWNFelvIH1o9ZAWFifpB3RwZOh6DCt5OdIfJCWLo9iZSRONWk1D1rEnSxUp|hi8JcsAHkznPkDFfaS1+xw==
Run Code Online (Sandbox Code Playgroud)
然后我想从PHP解码它!
我试过红宝石:
ERB::Util::url_encode(param)
Run Code Online (Sandbox Code Playgroud)
然后在Php urldecode($ param); 似乎不起作用!
我正在创建一个连接到RESTful后端的骨干应用程序.当我在模型上调用save()时,它将发布的数据作为字符串化的JSON发送:
{"firstName":"first","lastName":"last","Email":"email@gmail.com"}
Run Code Online (Sandbox Code Playgroud)
但我的服务器希望它的格式像查询字符串:
firstName=first&lastName=last&Email=email@gmail.com
Run Code Online (Sandbox Code Playgroud)
有没有办法让骨干以不同的方式发送它?
我有一个URL字符串,其末尾附加了变量,如下所示:
.../create?title=My Apartment
Run Code Online (Sandbox Code Playgroud)
我想逃避任何无效的字符(如空格),但是当我尝试这样做时,我使用以下方法在模拟器和我的设备(iOS 8.0)上崩溃:
NSLog("Item1: \(item)")
NSLog("Item2: \(item.title)")
if let scrubbed = item.title.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet()) {
NSLog("Scrubbed: \(scrubbed)")
} else {
NSLog("Nope!")
}
Run Code Online (Sandbox Code Playgroud)
我在模拟器上看到的是:
2014-09-24 16:59:19.120 MyApp[16406:171349] Item1: MyApp.PostItem
2014-09-24 16:59:19.121 MyApp[16406:171349] Item2: My Apartment
2014-09-24 16:59:19.125 MyApp[16406:171349] Scrubbed: My 0X0P+0partment
Run Code Online (Sandbox Code Playgroud)
注意那个擦洗字符串的奇怪之处.一段时间后,它崩溃抱怨一个构造不良的NSURL物体,毫不奇怪.
当我在我的设备上运行它时,我EXC_BAD_ACCESS在NSLog()试图打印的声明中崩溃了Scrubbed:
2014-09-24 17:04:37.378 MyApp[4346:2048259] Item1: MyApp.PostItem
2014-09-24 17:04:37.379 MyApp[4346:2048259] Item2: My Apartment
(lldb) po scrubbed
error: <EXPR>:1:1: error: non-nominal type '$__lldb_context' cannot be extended …Run Code Online (Sandbox Code Playgroud) 我试图使用netbeans运行jsf应用程序并在URLEncode中具有NullPointerException的这个例外.我认为Servlet的一些问题,但我不知道如何解决它来源:https://github.com/agoncal/agoncal-application-petstore-ee6
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)
java.lang.NullPointerException
at java.net.URLEncoder.encode(URLEncoder.java:204)
at com.sun.faces.context.UrlBuilder.addValuesToParameter(UrlBuilder.java:318)
at com.sun.faces.context.UrlBuilder.addParameters(UrlBuilder.java:127)
at com.sun.faces.context.ExternalContextImpl.encodeBookmarkableURL(ExternalContextImpl.java:1054)
at com.sun.faces.application.view.MultiViewHandler.getBookmarkableURL(MultiViewHandler.java:407)
at javax.faces.application.ViewHandlerWrapper.getBookmarkableURL(ViewHandlerWrapper.java:272)
at org.jboss.weld.jsf.ConversationAwareViewHandler.getBookmarkableURL(ConversationAwareViewHandler.java:132)
at com.sun.faces.renderkit.html_basic.OutcomeTargetRenderer.getEncodedTargetURL(OutcomeTargetRenderer.java:194)
at com.sun.faces.renderkit.html_basic.OutcomeTargetLinkRenderer.renderAsActive(OutcomeTargetLinkRenderer.java:158)
at com.sun.faces.renderkit.html_basic.OutcomeTargetLinkRenderer.encodeBegin(OutcomeTargetLinkRenderer.java:96)
at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:864)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1854)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) …Run Code Online (Sandbox Code Playgroud) 我有一个完全本地化的网站,在URL路径中有一些字符,通过该Response.sendTemporaryRedirect方法获得HTML编码:
String toReturn = /*StringEscapeUtils.unescapeHtml4(redirect)*/ redirect + "?" + URLEncoder.encode(json, "UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=UTF-8");
java.net.URI location = new java.net.URI(toReturn);
return Response.temporaryRedirect(location).build();
Run Code Online (Sandbox Code Playgroud)
重定向正在获得404,因为"%C3%B1%C3%AD"URL片段被误解了.解码,看起来像这样:ñí.
我已经尝试过URLDecoder.decode(url, 'UTF-8'),StringEscapeUtils.escapeHtml4在重定向之前没有运气.代码工作正常.
为什么javax.ws.rs.core.Response.sendTemporaryRedirectURLEncoding URL路径?