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 + -
显示快捷键?