anchor.diff:      option/0
   ]).
   
  +-define(is_method(M), (M =:= get orelse M =:= post orelse M =:= delete orelse M =:= put orelse M =:= patch)).
  +
   %% @doc Fetch the data and headers from an url
  --spec fetch(string()|binary(), options()) -> fetch_result().
  +-spec fetch(Url, Options) -> fetch_result() when
  +    Url :: string() | binary(),
  +    Options :: options().
   fetch(Url, Options) ->
  -    fetch_partial(Url, Options).
  +    fetch_partial(get, Url, <<>>, Options).
  +
  +%% @doc Fetch the data and headers from an url
  +-spec fetch(Method, Url, Payload, Options) -> fetch_result() when
  +    Method :: get | post | put | delete | patch,
  +    Url :: string()|binary(),
  +    Payload :: binary(),
  +    Options :: options().
  +fetch(Method, Url, Payload, Options) when is_binary(Payload), ?is_method(Method) ->
  +    fetch_partial(Method, Url, Payload, Options).
   
   
   %% @doc Fetch the first kilobytes of data and headers from an url
  --spec fetch_partial(string()|binary()) -> fetch_result().
  +-spec fetch_partial(Url) -> fetch_result() when
  +    Url :: string() | binary().
   fetch_partial(Url) ->
  -    fetch_partial(Url, [{max_length, ?HTTPC_LENGTH}]).
  +    fetch_partial(get, Url, <<>>, [{max_length, ?HTTPC_LENGTH}]).
   
   %% @doc Fetch the first N bytes of data and headers from an url, optionally save to the file device
  --spec fetch_partial(string()|binary(), options()) -> fetch_result().
  +-spec fetch_partial(Url, Options) -> fetch_result() when
  +    Url :: string() | binary(),
  +    Options :: options().
   fetch_partial("data:" ++ _ = DataUrl, Options) ->
       fetch_data_url(DataUrl, Options);
   fetch_partial(<<"data:", _/binary>> = DataUrl, Options) ->
       fetch_data_url(DataUrl, Options);
   fetch_partial(Url, Options) ->
  +    fetch_partial(get, Url, <<>>, Options).
  +
  +%% @doc Fetch the first N bytes of data and headers from an url, optionally save to the file device
  +-spec fetch_partial(Method, Url, Payload, Options) -> fetch_result() when
  +    Method :: get | post | delete | put | patch,
  +    Url :: string()|binary(),
  +    Payload :: binary(),
  +    Options :: options().
  +fetch_partial(Method, Url, Payload, Options) when is_binary(Payload), ?is_method(Method) ->
       OutDevice = proplists:get_value(device, Options),
  -    Length = proplists:get_value(max_length, Options, ?HTTPC_MAX_LENGTH),
  -    fetch_partial(z_convert:to_list(Url), 0, Length, OutDevice, Options).
  +    MaxLength = proplists:get_value(max_length, Options, ?HTTPC_MAX_LENGTH),
  +    fetch_partial(Method, z_convert:to_list(Url), Payload, 0, MaxLength, OutDevice, Options).
   
   
   -spec ensure_profiles() -> ok.
  
positive.code:                             fetch_stream_data(ReqId, HandlerPid, Hs, Data1, N1, Max, OutDev, Opts);
                          false ->
                              httpc:cancel_request(ReqId),
                              {ok, {200, Hs, N, Data1}}
                      end;
                  {error, _} = Error ->
                      httpc:cancel_request(ReqId),
  
negative.code:                 | {accept, binary() | string()}
                  | {user_agent, binary() | string()}
                  | {language, atom()}
                  | {content_type, binary() | string()}
                  | insecure.
  
  -type fetch_result() :: {ok, {string(), list({string(), string()}), pos_integer(), binary()}} | {error, term()}.
  