@@ -52,22 +52,24 @@ parse_url(URL) ->
52
52
parse_url (URL , # hackney_url {transport = hackney_tcp , scheme = http }).
53
53
54
54
parse_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 ,
59
61
path = <<>>,
62
+ qs = Query ,
60
63
fragment = Fragment });
61
64
[Addr ] ->
62
65
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 >>,
64
67
path = Path ,
68
+ qs = Query ,
65
69
fragment = Fragment });
66
70
[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 >>,
71
73
qs = Query ,
72
74
fragment = Fragment })
73
75
end .
@@ -76,6 +78,8 @@ parse_url(URL, S) ->
76
78
raw_fragment (<<" " >>) -> <<" " >>;
77
79
raw_fragment (Fragment ) -> <<" #" , Fragment /binary >>.
78
80
81
+ raw_query (<<>>) -> <<>>;
82
+ raw_query (Query ) -> <<" ?" , Query /binary >>.
79
83
80
84
property (transport , URL ) -> URL # hackney_url .transport ;
81
85
property (scheme , URL ) -> URL # hackney_url .scheme ;
@@ -261,15 +265,15 @@ parse_netloc(Netloc, #hackney_url{transport=Transport}=S) ->
261
265
end .
262
266
263
267
264
- parse_path (Path ) ->
268
+ cut_query (Path ) ->
265
269
case binary :split (Path , <<" ?" >>) of
266
270
[_Path ] ->
267
271
{Path , <<>>};
268
272
[Path1 , Query ] ->
269
273
{Path1 , Query }
270
274
end .
271
275
272
- parse_fragment (S ) ->
276
+ cut_fragment (S ) ->
273
277
case binary :split (S , <<" #" >>) of
274
278
[_S ] ->
275
279
{S , <<>>};
0 commit comments