http.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 397 行 · 第 1/2 页
ERL
397 行
case http_util:key1search(Options, full_result, true) of true -> {ok, {StatusLine, Headers, Body}}; false -> {_, Status, _} = StatusLine, {ok, {Status, Body}} end.%% This options is a workaround for http servers that do not follow the %% http standard and have case sensative header parsing. Should only be%% used if there is no other way to communicate with the server or for%% testing purpose.headers_as_is(Headers, Options) -> case http_util:key1search(Options, headers_as_is, false) of false -> []; true -> Headers end.http_options([], Acc) -> Acc;http_options([{timeout, Val} | Settings], Acc) when is_integer(Val), Val >= 0-> http_options(Settings, Acc#http_options{timeout = Val});http_options([{timeout, infinity} | Settings], Acc) -> http_options(Settings, Acc#http_options{timeout = infinity});http_options([{autoredirect, Val} | Settings], Acc) when Val == true; Val == false -> http_options(Settings, Acc#http_options{autoredirect = Val});http_options([{ssl, Val} | Settings], Acc) -> http_options(Settings, Acc#http_options{ssl = Val});http_options([{relaxed, Val} | Settings], Acc) when Val == true; Val == false -> http_options(Settings, Acc#http_options{relaxed = Val});http_options([{proxy_auth, Val = {User, Passwd}} | Settings], Acc) when is_list(User), is_list(Passwd) -> http_options(Settings, Acc#http_options{proxy_auth = Val});http_options([Option | Settings], Acc) -> error_logger:info_report("Invalid option ignored ~p~n", [Option]), http_options(Settings, Acc).header_record([], RequestHeaders, Host) -> validate_headers(RequestHeaders, Host);header_record([{"cache-control", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'cache-control' = Val}, Host); header_record([{"connection", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{connection = Val}, Host);header_record([{"date", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{date = Val}, Host); header_record([{"pragma", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{pragma = Val}, Host); header_record([{"trailer", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{trailer = Val}, Host); header_record([{"transfer-encoding", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'transfer-encoding' = Val}, Host); header_record([{"upgrade", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{upgrade = Val}, Host); header_record([{"via", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{via = Val}, Host); header_record([{"warning", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{warning = Val}, Host); header_record([{"accept", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{accept = Val}, Host); header_record([{"accept-charset", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'accept-charset' = Val}, Host); header_record([{"accept-encoding", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'accept-encoding' = Val}, Host); header_record([{"accept-language", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'accept-language' = Val}, Host); header_record([{"authorization", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{authorization = Val}, Host); header_record([{"expect", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{expect = Val}, Host);header_record([{"from", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{from = Val}, Host); header_record([{"host", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{host = Val}, Host);header_record([{"if-match", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'if-match' = Val}, Host); header_record([{"if-modified-since", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'if-modified-since' = Val}, Host); header_record([{"if-none-match", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'if-none-match' = Val}, Host); header_record([{"if-range", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'if-range' = Val}, Host); header_record([{"if-unmodified-since", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'if-unmodified-since' = Val}, Host); header_record([{"max-forwards", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'max-forwards' = Val}, Host); header_record([{"proxy-authorization", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'proxy-authorization' = Val}, Host); header_record([{"range", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{range = Val}, Host); header_record([{"referer", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{referer = Val}, Host); header_record([{"te", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{te = Val}, Host); header_record([{"user-agent", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'user-agent' = Val}, Host); header_record([{"allow", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{allow = Val}, Host); header_record([{"content-encoding", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'content-encoding' = Val}, Host); header_record([{"content-language", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'content-language' = Val}, Host); header_record([{"content-length", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'content-length' = Val}, Host); header_record([{"content-location", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'content-location' = Val}, Host); header_record([{"content-md5", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'content-md5' = Val}, Host); header_record([{"content-range", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'content-range' = Val}, Host); header_record([{"content-type", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'content-type' = Val}, Host); header_record([{"expires", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{expires = Val}, Host); header_record([{"last-modified", Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{'last-modified' = Val}, Host); header_record([{Key, Val} | Rest], RequestHeaders, Host) -> header_record(Rest, RequestHeaders#http_request_h{ other = [{Key, Val} | RequestHeaders#http_request_h.other]}, Host).validate_headers(RequestHeaders = #http_request_h{te = undefined}, Host) -> validate_headers(RequestHeaders#http_request_h{te = ""}, Host);validate_headers(RequestHeaders = #http_request_h{host = undefined}, Host) -> validate_headers(RequestHeaders#http_request_h{host = Host}, Host);validate_headers(RequestHeaders, _) -> RequestHeaders.ensure_started(Scheme) -> %% Start of the inets application should really be handled by the %% application using inets. case application:start(inets) of {error,{already_started,inets}} -> ok; {error, {{already_started,_}, % Started as an included application {inets_app, start, _}}} -> ok; ok -> error_logger:info_report("The inets application was not started." " Has now been started as a temporary" " application.") end, case Scheme of https -> %% Start of the ssl application should really be handled by the %% application using inets. case application:start(ssl) of {error,{already_started,ssl}} -> ok; %% Started as an included application {error, {{already_started,_}, {ssl_app, start, _}}} -> ok; ok -> error_logger:info_report("The ssl application was not " "started. Has now been started " "as a temporary application.") end; _ -> ok end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?