@@ -52,22 +52,24 @@ parse_url(URL) ->
5252 parse_url (URL , # hackney_url {transport = hackney_tcp , scheme = http }).
5353
5454parse_url (URL , S ) ->
55- {URL1 , Fragment } = parse_fragment (URL ),
56- case binary :split (URL1 , <<" /" >>) of
57- [URL1 ] ->
58- parse_addr1 (URL1 , S # hackney_url {raw_path = raw_fragment (Fragment ),
55+ {URL1 , Fragment } = cut_fragment (URL ),
56+ {URL2 , Query } = cut_query (URL1 ),
57+ RawPath = << (raw_query (Query ))/binary , (raw_fragment (Fragment ))/binary >>,
58+ case binary :split (URL2 , <<" /" >>) of
59+ [URL2 ] ->
60+ parse_addr1 (URL2 , S # hackney_url {raw_path = RawPath ,
5961 path = <<>>,
62+ qs = Query ,
6063 fragment = Fragment });
6164 [Addr ] ->
6265 Path = <<" /" >>,
63- parse_addr1 (Addr , S # hackney_url {raw_path = << Path /binary , ( raw_fragment ( Fragment )) /binary >>,
66+ parse_addr1 (Addr , S # hackney_url {raw_path = << Path /binary , RawPath /binary >>,
6467 path = Path ,
68+ qs = Query ,
6569 fragment = Fragment });
6670 [Addr , Path ] ->
67- RawPath = <<" /" , Path /binary , (raw_fragment (Fragment ))/binary >>,
68- {Path1 , Query } = parse_path ( << " /" , Path /binary >>),
69- parse_addr (Addr , S # hackney_url {raw_path = RawPath ,
70- path = Path1 ,
71+ parse_addr (Addr , S # hackney_url {raw_path = <<" /" , Path /binary , RawPath /binary >>,
72+ path = <<" /" , Path /binary >>,
7173 qs = Query ,
7274 fragment = Fragment })
7375 end .
@@ -76,6 +78,8 @@ parse_url(URL, S) ->
7678raw_fragment (<<" " >>) -> <<" " >>;
7779raw_fragment (Fragment ) -> <<" #" , Fragment /binary >>.
7880
81+ raw_query (<<>>) -> <<>>;
82+ raw_query (Query ) -> <<" ?" , Query /binary >>.
7983
8084property (transport , URL ) -> URL # hackney_url .transport ;
8185property (scheme , URL ) -> URL # hackney_url .scheme ;
@@ -261,15 +265,15 @@ parse_netloc(Netloc, #hackney_url{transport=Transport}=S) ->
261265 end .
262266
263267
264- parse_path (Path ) ->
268+ cut_query (Path ) ->
265269 case binary :split (Path , <<" ?" >>) of
266270 [_Path ] ->
267271 {Path , <<>>};
268272 [Path1 , Query ] ->
269273 {Path1 , Query }
270274 end .
271275
272- parse_fragment (S ) ->
276+ cut_fragment (S ) ->
273277 case binary :split (S , <<" #" >>) of
274278 [_S ] ->
275279 {S , <<>>};
0 commit comments