我找不到abs_path
是“/search?search=Thrust+washers”的问题,更不知道如何调试。
Class: error
Exception: {badmatch,{error,invalid_uri}}
Req: {http_request,'GET',{abs_path,"/search?search=Thrust+washers"},{1,1}}
Stack: [{myurl,pass_through,1,
[{file,"/usr/local/lib/yaws/voxx/ebin/myurl.erl"},{line,507}]},
Line 506:
Http_result = httpc:request(Url),
{ok, {{V, S, R}, _, _}} = Http_result,
它似乎是由URL中的+
(或%20
)字符引起的,但这些字符完全法律的。
我找到了Yaws process died: {{badmatch,<<>>}和史蒂夫维诺斯基的答案,但由于缺乏经验而不能利用它。
1条答案
按热度按时间3pmvbmvn1#
我不知道您的应用程序的确切性质,但我猜它所做的是Yaws接收到一个URL请求,其中包含您所显示的数据,然后您的代码试图使用Yaws解析的URL作为HTTP客户端发出请求。
我认为查询中的“+”字符必须是URL编码的,因为“+”在“统一资源标识符(URI):通用语法”规范,第2.2节(RFC 3986);它通常用于表示查询中的空格字符。
使用
uri_string
module中的Erlang函数编写查询,我们看到它被编码:我们在Python中看到了同样的情况:
如果您使用一个URL向Yaws发出curl请求,并以这种方式对查询进行编码,Yaws会将您的查询解码为您所期望的
{"page","x+y"}
。