Erlang 21

httpc




erlang

httpc

मॉड्यूल

httpc

मॉड्यूल सारांश

एक HTTP / 1.1 क्लाइंट

विवरण

यह मॉड्यूल RFC 2616 अनुसार HTTP / 1.1 संगत क्लाइंट को API प्रदान करता है। कैशिंग समर्थित नहीं है।

ध्यान दें

Inets एप्लिकेशन शुरू करते Inets , डिफ़ॉल्ट प्रोफ़ाइल के लिए एक प्रबंधक प्रक्रिया शुरू की जाती है। इस API में ऐसे फ़ंक्शन जो किसी प्रोफ़ाइल का स्पष्ट रूप से उपयोग नहीं करते हैं, डिफ़ॉल्ट प्रोफ़ाइल तक पहुंचता है। एक प्रोफ़ाइल प्रॉक्सी विकल्पों, कुकीज़ और अन्य विकल्पों पर नज़र रखती है जिन्हें एक से अधिक अनुरोधों पर लागू किया जा सकता है।

यदि स्कीम https का उपयोग किया जाता है, तो SSL आवेदन शुरू किया जाना चाहिए। जब https लिंक को प्रॉक्सी से गुजरना पड़ता है, तो CONNECT विधि एक्सटेंशन HTTP-1.1 का उपयोग एक सुरंग को स्थापित करने के लिए किया जाता है और फिर कनेक्शन को TLS में अपग्रेड किया जाता है। हालांकि, RFC 2817 अनुसार "टीएलएस अपग्रेड" समर्थित नहीं है।

पाइप लाइनिंग का उपयोग केवल तभी किया जाता है जब पाइपलाइन टाइम-आउट सेट हो, अन्यथा बिना पाइपलाइन के लगातार कनेक्शन का उपयोग किया जाता है। यही है, ग्राहक हमेशा अगला अनुरोध भेजने से पहले पिछली प्रतिक्रिया का इंतजार करता है।

Inets User's Guide में कुछ उदाहरण दिए गए हैं।

जानकारी का प्रकार

इस मॉड्यूल में एक से अधिक बार उपयोग की जाने वाली परिभाषाएँ टाइप करें:

boolean() = true | false

string() = ASCII अक्षरों की सूची

request_id() = reference()

profile() = atom()

path() = string() फ़ाइल पथ या निर्देशिका पथ का प्रतिनिधित्व करता है

ip_address() = inet(3) मैनुअल पेज को कर्नेल में देखें।

socket_opt() = gen_tcp(3) gen_tcp(3) और ssl(3) connect (s) द्वारा उपयोग किए गए विकल्पों को देखें।

Http डेटा प्रकार

HTTP से संबंधित परिभाषाएँ टाइप करें:

method() = head | get | put | post | trace | options | delete | patch

request()

= {url(), headers()}

| {url(), headers(), content_type(), body()}

url() = string() सिंटैक्स RFC 2396 में URI परिभाषा के अनुसार, उदाहरण के लिए "http://www.erlang.org"

status_line() = {http_version(), status_code(), reason_phrase()}

http_version() = string() , उदाहरण के लिए, "HTTP/1.1"

status_code() = integer()

reason_phrase() = string()

content_type() = string()

headers() = [header()]

header() = {field(), value()}

field() = string()

value() = string()

body()

= string() | binary() string() | binary()

| {fun(accumulator())

-> body_processing_result(), accumulator()}

| {chunkify, fun(accumulator())

-> body_processing_result(), accumulator()}

body_processing_result() = eof | {ok, iolist(), accumulator()}

accumulator() = term()

filename() = string()

HTTP के बारे में अधिक जानकारी के लिए, RFC 2616 देखें।

Ssl डेटा प्रकार

SSL विकल्पों ( ssloptions() ) के बारे में जानकारी के लिए ssl(3) देखें।

Http क्लाइंट सेवा प्रारंभ / बंद करें

Inets एप्लिकेशन शुरू करते Inets या डायनेमिक रूप से रनटाइम में Inets एप्लिकेशन API inets:start(httpc, ServiceConfig) या inets:start(httpc, ServiceConfig, How) करके एक HTTP क्लाइंट को कॉन्फ़िगर किया जा सकता है inets:start(httpc, ServiceConfig, How) , inets(3) देखें inets(3) । कॉन्फ़िगरेशन विकल्प निम्नानुसार हैं:

{प्रोफ़ाइल, प्रोफ़ाइल ()}

प्रोफ़ाइल का नाम, DATA TYPES देखें। यह विकल्प अनिवार्य है।

{data_dir, पथ ()}

निर्देशिका जहां प्रोफ़ाइल लगातार डेटा बचा सकता है। यदि छोड़ दिया जाता है, तो सभी कुकीज़ को सत्र कुकीज़ के रूप में माना जाता है।

क्लाइंट को inets:stop(httpc, Pid) का उपयोग करके रोका जा सकता है inets:stop(httpc, Pid) या inets:stop(httpc, Profile)

निर्यात

Cancel_request (RequestId) ->
रद्द करें_request (RequestId, प्रोफ़ाइल) -> ठीक है

प्रकार

जब stand_alone शुरू किया गया stand_alone केवल पिड का उपयोग किया जा सकता है।

एक एसिंक्रोनस HTTP अनुरोध रद्द करता है। ध्यान दें कि यह गारंटी नहीं देता है कि अनुरोध प्रतिक्रिया वितरित नहीं की गई है। क्योंकि यह अतुल्यकालिक है, रद्द होने पर अनुरोध पहले ही पूरा हो सकता है।

कुकी_हेडर (यूआरएल) ->
कुकी_हेडर (यूआरएल, प्रोफाइल | ऑप्स) -> हेडर () | {त्रुटि, कारण}
कुकी_हेडर (Url, Opts, Profile) -> शीर्ष लेख () | {त्रुटि, कारण}

प्रकार

जब stand_alone शुरू stand_alone

कुकी शीर्षलेख लौटाता है जो प्रोफ़ाइल Profile का उपयोग करके Url लिए अनुरोध करते समय भेजा गया होगा। यदि कोई प्रोफ़ाइल निर्दिष्ट नहीं है, तो डिफ़ॉल्ट प्रोफ़ाइल का उपयोग किया जाता है।

विकल्प ipv6_host_with_bracket IPv6 पतों को पार्स करने के तरीके से संबंधित है। विवरण के लिए, request/[4,5] तर्क Options देखें request/[4,5]

get_options (OptionItems) -> {ठीक है, मान} | {त्रुटि, कारण}
get_options (OptionItems, प्रोफ़ाइल) -> {ठीक है, मान} | {त्रुटि, कारण}

प्रकार

जब stand_alone शुरू किया गया stand_alone केवल पिड का उपयोग किया जा सकता है।

क्लाइंट द्वारा वर्तमान में उपयोग किए गए विकल्पों को पुनः प्राप्त करता है।

जानकारी () -> सूची ()
जानकारी (प्रोफ़ाइल) -> सूची ()

प्रकार

जब stand_alone शुरू किया गया stand_alone केवल पिड का उपयोग किया जा सकता है।

विविध जानकारी की एक सूची तैयार करता है। डिबगिंग के लिए इरादा है। यदि कोई प्रोफ़ाइल निर्दिष्ट नहीं है, तो डिफ़ॉल्ट प्रोफ़ाइल का उपयोग किया जाता है।

reset_cookies () -> शून्य ()
reset_cookies (प्रोफ़ाइल) -> शून्य ()

प्रकार

जब stand_alone शुरू किया गया stand_alone केवल पिड का उपयोग किया जा सकता है।

निर्दिष्ट Profile लिए कुकी डेटाबेस को रीसेट करता है (साफ़ करता है)। यदि कोई प्रोफ़ाइल निर्दिष्ट नहीं है, तो डिफ़ॉल्ट प्रोफ़ाइल का उपयोग किया जाता है।

अनुरोध (यूआरएल) ->
अनुरोध (यूआरएल, प्रोफाइल) -> {ठीक है, परिणाम} | {त्रुटि, कारण}

प्रकार

जब stand_alone शुरू किया गया stand_alone केवल पिड का उपयोग किया जा सकता है।

httpc:request(get, {Url, []}, [], []) बराबर httpc:request(get, {Url, []}, [], [])

अनुरोध (विधि, अनुरोध, HTTPOptions, विकल्प) ->
अनुरोध (विधि, अनुरोध, HTTPOptions, विकल्प, प्रोफ़ाइल) -> {ठीक है, परिणाम} | {ठीक है, save_to_file} | {त्रुटि, कारण}

प्रकार

जब stand_alone शुरू किया गया stand_alone केवल पिड का उपयोग किया जा सकता है।

एक HTTP अनुरोध भेजता है। फ़ंक्शन सिंक्रोनस और एसिंक्रोनस दोनों हो सकता है। बाद के मामले में, फ़ंक्शन {ok, RequestId} और फिर उस मूल्य के आधार पर जानकारी receiver को दी जाती है।

HTTP विकल्प ( http_option() ) विवरण:

timeout

अनुरोध के लिए टाइम-आउट समय।

अनुरोध भेजने पर घड़ी टिक करना शुरू कर देती है।

समय मिलीसेकंड में है।

डिफ़ॉल्ट infinity

connect_timeout

कनेक्शन टाइम-आउट समय, प्रारंभिक अनुरोध के दौरान उपयोग किया जाता है, जब क्लाइंट सर्वर से कनेक्ट हो रहा है।

समय मिलीसेकंड में है।

डिफ़ॉल्ट विकल्प timeout का मूल्य है।

ssl

यह SSL/TLS कॉन्फ़िगरेशन विकल्प है।

चूक [] । उपलब्ध विकल्पों के लिए ssl:connect/[2,3,4] देखें।

autoredirect

क्लाइंट स्वचालित रूप से नए URI से जानकारी प्राप्त करता है और परिणाम के रूप में 30X-result कोड के बजाय देता है।

कुछ 30X-result कोड के लिए, स्वचालित रीडायरेक्ट की अनुमति नहीं है। इन मामलों में 30X-result हमेशा लौटाया जाता है।

डिफ़ॉल्ट true

proxy_auth

अनुरोधित उपयोगकर्ता नाम और पासवर्ड का उपयोग करके एक प्रॉक्सी-प्राधिकरण हेडर अनुरोध में जोड़ा गया है।

version

क्लाइंट को HTTP/1.0 या HTTP/0.9 क्लाइंट के रूप में कार्य करने के लिए उपयोग किया जा सकता है। डिफ़ॉल्ट रूप से यह एक HTTP/1.1 क्लाइंट है। HTTP/1.0 का उपयोग करते समय लगातार कनेक्शन का उपयोग नहीं किया जाता है।

डिफ़ॉल्ट स्ट्रिंग "HTTP/1.1"

relaxed

यदि यह true , HTTP-मानक से ज्ञात सर्वर विचलन के लिए वर्कअराउंड सक्षम हैं।

डिफ़ॉल्ट false

विकल्प ( option() ) विवरण:

sync

सिंक्रोनस या एसिंक्रोनस होने के लिए अनुरोध का विकल्प।

डिफ़ॉल्ट true

stream

कॉलिंग प्रक्रिया या फ़ाइल पर 200 या 206 की प्रतिक्रिया में शरीर को प्रवाहित करता है। विकल्प self का उपयोग करके कॉलिंग प्रक्रिया में स्ट्रीमिंग करते समय, निम्न स्ट्रीम संदेश उस प्रक्रिया को भेजे जाते हैं: {http, {RequestId, stream_start, Headers}}, {http, {RequestId, stream, BinBodyPart}}, and {http, {RequestId, stream_end, Headers}}

विकल्प {self, once} का उपयोग करके कॉलिंग प्रक्रियाओं के लिए स्ट्रीमिंग करते समय, पहले संदेश में एक अतिरिक्त तत्व होता है, अर्थात, {http, {RequestId, stream_start, Headers, Pid}} । यह प्रक्रिया आईडी है जिसे httpc:stream_next/1 तर्क के रूप में उपयोग किया जाता है ताकि अगले संदेश को कॉलिंग प्रक्रिया में भेजा जा सके।

ध्यान दें कि chunked एन्कोडिंग हेडर जोड़ सकता है ताकि stream_end तुलना में stream_start संदेश में अधिक हेडर stream_start । जब किसी फ़ाइल और अनुरोध के लिए स्ट्रीमिंग अतुल्यकालिक है, तो संदेश {http, {RequestId, saved_to_file}} भेजा जाता है।

डिफ़ॉल्ट none

body_format

परिभाषित करता है कि क्या शरीर को एक स्ट्रिंग या बाइनरी के रूप में वितरित किया जाना है। यह विकल्प केवल सिंक्रोनस अनुरोध के लिए मान्य है।

डिफ़ॉल्ट string

full_result

परिभाषित करता है कि क्या "पूर्ण परिणाम" कॉलर को वापस करना है (अर्थात, निकाय, शीर्षलेख और संपूर्ण स्थिति पंक्ति) या नहीं (निकाय और स्थिति कोड)।

डिफ़ॉल्ट true

headers_as_is

परिभाषित करता है कि उपयोगकर्ता द्वारा प्रदान किए गए हेडर को कम केस बनाया जाना है या केस संवेदनशील माना जाना है।

HTTP मानक के लिए उन्हें असंवेदनशील होने की आवश्यकता होती है। इस सुविधा का उपयोग केवल तभी करें जब सर्वर के साथ संवाद करने या परीक्षण के उद्देश्य के लिए कोई अन्य तरीका न हो। जब इस विकल्प का उपयोग किया जाता है, तो कोई हेडर स्वचालित रूप से नहीं जोड़ा जाता है। सभी आवश्यक हेडर उपयोगकर्ता द्वारा प्रदान किए जाने चाहिए।

डिफ़ॉल्ट false

socket_opts

इस अनुरोध के लिए उपयोग किए जाने वाले सॉकेट विकल्प।

फ़ंक्शन set_options द्वारा निर्धारित किसी भी मूल्य को ओवरराइड करता है।

HTTP क्लाइंट द्वारा विकल्पों की वैधता की जांच नहीं की जाती है, उन्हें सही माना जाता है और ssl एप्लिकेशन और इनसेट ड्राइवर को पास किया जाता है, जो कि सही नहीं होने पर उन्हें अस्वीकार कर सकता है।

ध्यान दें

socket_opts विकल्प सेट करते समय लगातार कनेक्शन का समर्थन नहीं किया socket_opts है। जब socket_opts सेट नहीं किया जाता है तो वर्तमान कार्यान्वयन उसी होस्ट के अनुरोधों को मानता है, पोर्ट संयोजन समान सॉकेट विकल्पों का उपयोग करेगा।

डिफ़ॉल्ट रूप से फ़ंक्शन set_options द्वारा सेट सॉकेट विकल्प का उपयोग कनेक्शन स्थापित करते समय किया जाता है।

receiver

परिभाषित करता है कि ग्राहक किस प्रकार एक अतुल्यकालिक अनुरोध का परिणाम देता है ( sync में मान false )।

pid()

इस प्रक्रिया में संदेश {http, ReplyInfo} प्रारूप में भेजे जाते हैं।

function/1

उपलब्ध कराई गई Receiver(ReplyInfo) को कॉल के माध्यम से जानकारी रिसीवर को दी जाती है।

{Module, Function, Args}

कॉलबैक फ़ंक्शन apply(Module, Function, [ReplyInfo | Args]) करने के लिए कॉल के माध्यम से जानकारी रिसीवर को दी जाती है apply(Module, Function, [ReplyInfo | Args])

इन सभी मामलों में, ReplyInfo में निम्नलिखित संरचना है:

{RequestId, saved_to_file}
{RequestId, {error, Reason}}
{RequestId, Result}
{RequestId, stream_start, Headers}
{RequestId, stream_start, Headers, HandlerPid}
{RequestId, stream, BinBodyPart}
{RequestId, stream_end, Headers}

डिफ़ॉल्ट अनुरोध फ़ंक्शन ( self() ) को कॉल करने वाली प्रक्रिया की pid है।

ipv6_host_with_brackets

परिभाषित करता है कि एक URI के होस्ट-पोर्ट भाग को कोष्ठक के साथ IPv6 पते के साथ पार्स करते समय, यदि उन कोष्ठकों को बरकरार रखा जाए ( true ) या स्ट्रिप्ड ( false )।

डिफ़ॉल्ट false

set_options (विकल्प) ->
set_options (विकल्प, प्रोफ़ाइल) -> ठीक | {त्रुटि, कारण}

प्रकार

उदाहरण: "लोकलहोस्ट" या "foo.bar.se"

उदाहरण: 8080

उदाहरण: "* .ericsson.se"

उदाहरण: "134.138" या "[FEDC: BA98" (सभी IP पते जो 134.138 या FEDC: BA98 से शुरू होते हैं, "66.35.250.150" या "[2010: 836B: 4179: 836B: 4179]" (एक पूर्ण IP पता) )। proxy डिफॉल्ट्स को {undefined, []} , यानी कोई प्रॉक्सी कॉन्फ़िगर नहीं किया गया है और proxy के मान के लिए https_proxy डिफॉल्ट करता है। एक मेजबान को लगातार कनेक्शन की अधिकतम संख्या। डिफ़ॉल्ट 2 । मेजबान से एक ही कनेक्शन पर अधिकतम बकाया अनुरोध। डिफ़ॉल्ट 5 । यदि एक सतत कनेक्शन मिलीसेकंड में keep_alive_timeout से अधिक लंबा है, तो क्लाइंट कनेक्शन बंद कर देता है। सर्वर में ऐसा टाइम-आउट भी हो सकता है, लेकिन इसे न लें। डिफ़ॉल्ट 120000 (= 2 मिनट) है। होस्ट करने के लिए पाइपलाइन किए गए कनेक्शन पर अधिकतम बकाया अनुरोध। डिफ़ॉल्ट 2 । यदि एक लगातार कनेक्शन मिलीसेकंड में pipeline_timeout टाइमआउट से अधिक लंबा है, तो क्लाइंट कनेक्शन बंद कर देता है। डिफ़ॉल्ट 0 , जिसके परिणामस्वरूप पाइपलाइनिंग का उपयोग नहीं किया जा रहा है। यदि कुकीज़ सक्षम की जाती हैं, तो सभी वैध कुकीज़ ग्राहक प्रबंधक के कुकी डेटाबेस में स्वतः सहेज ली जाती हैं। यदि विकल्प verify का उपयोग किया जाता है, तो कुकी को सहेजने के लिए फ़ंक्शन store_cookies/2 को कॉल करना होगा। डिफ़ॉल्ट disabled । डिफ़ॉल्ट inet । यदि होस्ट में कई नेटवर्क इंटरफ़ेस हैं, तो यह विकल्प निर्दिष्ट करता है कि किसका उपयोग करना है। विवरण के लिए gen_tcp:connect/3,4 देखें gen_tcp:connect/3,4 । उपयोग करने के लिए स्थानीय पोर्ट संख्या। विवरण के लिए gen_tcp:connect/3,4 देखें gen_tcp:connect/3,4 । विकल्प क्लाइंट द्वारा उपयोग किए जाने वाले सॉकेट विकल्पों से जुड़े होते हैं। नया अनुरोध हैंडलर प्रारंभ होने पर (प्रारंभिक कनेक्ट के लिए) ये डिफ़ॉल्ट मान हैं। वे सीधे सत्यापन के बिना अंतर्निहित परिवहन ( gen_tcp या SSL ) में पारित हो जाते हैं। डिफ़ॉल्ट false । इस विकल्प का उपयोग क्लाइंट पर Erlang ट्रेस के विभिन्न स्तरों को चालू (या बंद) करने के लिए किया जाता है। यह एक डीबग सुविधा है। जब stand_alone शुरू किया गया stand_alone केवल पिड का उपयोग किया जा सकता है। एक यूनिक्स डोमेन सॉकेट पर HTTP अनुरोध भेजने के लिए प्रायोगिक विकल्प। unix_socket का मान unix_socket प्रक्रिया के लिए पढ़ने / लिखने की अनुमति के साथ एक unix डोमेन सॉकेट फ़ाइल का पूर्ण पथ होगा। डिफ़ॉल्ट undefined

बाद के अनुरोधों के लिए उपयोग किए जाने वाले विकल्प सेट करता है।

ध्यान दें

यदि संभव हो तो, क्लाइंट अपने कनेक्शन को जीवित रखता है और कॉन्फ़िगरेशन और वर्तमान परिस्थितियों के आधार पर पाइपलाइन के साथ या बिना लगातार कनेक्शन का उपयोग करता है। HTTP / 1.1 विनिर्देशन एक दिशानिर्देश प्रदान नहीं करता है कि कितने कनेक्शन जो लगातार कनेक्शन पर भेजे जाने के लिए आदर्श हैं। यह आवेदन पर बहुत कुछ निर्भर करता है।

अनुरोधों की लंबी कतार उपयोगकर्ता-कथित देरी का कारण बन सकती है, क्योंकि पहले के अनुरोधों को पूरा होने में लंबा समय लग सकता है। HTTP / 1.1 विनिर्देश प्रति सर्वर दो स्थिर कनेक्शनों की एक सीमा का सुझाव देता है, जो विकल्प max_sessions का डिफ़ॉल्ट मान है।

वर्तमान कार्यान्वयन समान होस्ट के अनुरोधों को मानता है, पोर्ट संयोजन समान सॉकेट विकल्पों का उपयोग करेगा।

store_cookies (SetCookieHeaders, Url) ->
store_cookies (SetCookieHeaders, Url, Profile) -> ok | {त्रुटि, कारण}

प्रकार

जब stand_alone शुरू किया गया stand_alone केवल पिड का उपयोग किया जा सकता है।

क्लाइंट प्रोफ़ाइल कुकी डेटाबेस में SetCookieHeaders में परिभाषित कुकीज़ सहेजता है। इस फ़ंक्शन को कॉल करें यदि विकल्प cookies को verify करने के verify सेट किया गया है। यदि कोई प्रोफ़ाइल निर्दिष्ट नहीं है, तो डिफ़ॉल्ट प्रोफ़ाइल का उपयोग किया जाता है।

stream_next (Pid) -> ठीक है

प्रकार

जैसा कि stream_start message में प्राप्त हुआ है

ट्रिगर किए जाने वाले अगले संदेश को ट्रिगर करता है, अर्थात, सॉकेट्स के लिए सक्रिय लोगों के समान व्यवहार।

जो_कोकिस () -> कुकीज़ ()
जो_कोकिस (प्रोफाइल) -> कुकीज़ ()

प्रकार

जब stand_alone शुरू किया गया stand_alone केवल पिड का उपयोग किया जा सकता है।

पूरे कुकी डेटाबेस की एक सूची तैयार करता है। डिबगिंग / परीक्षण प्रयोजनों के लिए इरादा। यदि कोई प्रोफ़ाइल निर्दिष्ट नहीं है, तो डिफ़ॉल्ट प्रोफ़ाइल का उपयोग किया जाता है।

कौन सा_session () -> session_info ()
किस_सेंसेस (प्रोफाइल) -> सेशन_इनफो ()

प्रकार

जब stand_alone शुरू किया गया stand_alone केवल पिड का उपयोग किया जा सकता है।

सत्र डेटाबेस का थोड़ा संसाधित डंप का उत्पादन करता है। यह डिबगिंग के लिए अभिप्रेत है। यदि कोई प्रोफ़ाइल निर्दिष्ट नहीं है, तो डिफ़ॉल्ट प्रोफ़ाइल का उपयोग किया जाता है।

यह भी देखें

RFC 2616 , inets(3) , gen_tcp(3) , ssl(3)