PHP: POST na GET maombi kwa Kompyuta. Jinsi ya kutuma ombi la chapisho kutoka kwa kivinjari: njia ya kuchapisha

Chapisho hili ni jibu la swali lililoulizwa katika maoni kwa moja ya nakala zangu.

Katika nakala hii nataka kukuambia ni njia gani za HTTP GET/POST/PUT/DELETE na zingine ni kwanini zilivumbuliwa na jinsi ya kuzitumia kwa mujibu wa REST.

HTTP

Kwa hiyo, ni ipi mojawapo ya itifaki kuu za mtandao? Nitatuma pedants kwa RFC2616, na nitawaambia wengine kibinadamu :)

Itifaki hii inaelezea mwingiliano kati ya kompyuta mbili (mteja na seva), iliyojengwa kwa msingi wa ujumbe unaoitwa ombi (Ombi) na majibu (Majibu). Kila ujumbe una sehemu tatu: mstari wa kuanzia, vichwa na mwili. Katika kesi hii, mstari wa kuanzia tu unahitajika.

Mistari ya kuanzia ya ombi na majibu ina fomati tofauti - tunavutiwa tu na safu ya kuanzia ya ombi, ambayo inaonekana kama hii:

NJIA URI HTTP/ VERSION ,

Ambapo METHOD ni mbinu ya ombi la HTTP, URI ni kitambulisho cha rasilimali, VERSION ni toleo la itifaki (toleo la 1.1 kwa sasa ni la sasa).

Vijajuu ni mkusanyiko wa jozi za thamani ya jina zilizotenganishwa na koloni. Vichwa vya habari vinatoa habari mbalimbali za huduma: encoding ya ujumbe, jina la kivinjari na toleo, anwani ambayo mteja alikuja (Referrer), na kadhalika.

Mwili wa ujumbe ni data halisi inayopitishwa. Katika jibu, data iliyopitishwa kawaida ni ukurasa wa HTML ambao kivinjari kiliomba, na katika ombi, kwa mfano, katika mwili wa ujumbe, yaliyomo kwenye faili zilizopakiwa kwenye seva hupitishwa. Lakini kama sheria, hakuna mwili wa ujumbe katika ombi hata kidogo.

Mfano wa Mwingiliano wa HTTP

Hebu tuangalie mfano.

Ombi:
PATA /index.php HTTP/1.1 Mpangishi: example.com Wakala wa Mtumiaji: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Kubali: maandishi/html Muunganisho: funga
Mstari wa kwanza ni mstari wa hoja, iliyobaki ni vichwa; mwili wa ujumbe haupo

Jibu:
HTTP/1.0 200 Sawa Seva: nginx/0.6.31 Lugha-ya Maudhui: ru Aina ya Maudhui: maandishi/html; charset=utf-8 Urefu wa Maudhui: 1234 Muunganisho: funga ... UKURASA WA HTML WENYEWE...

Rasilimali na Mbinu

Wacha turudi kwenye safu ya kuanzia ya ombi na tukumbuke kuwa ina parameta kama URI. Hii inawakilisha Kitambulisho cha Rasilimali Sawa - kitambulisho sare cha rasilimali. Rasilimali ni, kama sheria, faili kwenye seva (mfano URI katika kesi hii ni "/styles.css"), lakini kwa ujumla rasilimali inaweza pia kuwa kitu cha kufikirika ("/blogs/webdev/" - pointi. kwa ukuzaji wa kizuizi cha "Wavuti" badala ya kwenye faili maalum).

Aina ya ombi la HTTP (pia huitwa mbinu ya HTTP) huambia seva ni hatua gani tunataka kutekeleza kwenye rasilimali. Hapo awali (mapema miaka ya 90) ilichukuliwa kuwa mteja anaweza kutaka kitu kimoja tu kutoka kwa rasilimali - kuipokea, lakini sasa kwa kutumia itifaki ya HTTP unaweza kuunda machapisho, kuhariri wasifu, kufuta ujumbe na mengi zaidi. Na vitendo hivi ni vigumu kuchanganya na neno "risiti".

Ili kutofautisha vitendo kutoka kwa rasilimali katika kiwango cha njia za HTTP, chaguzi zifuatazo ziligunduliwa:

  • PATA - kupata rasilimali
  • POST - uundaji wa rasilimali
  • PUT - sasisho la rasilimali
  • FUTA - ufutaji wa rasilimali
Tafadhali kumbuka kuwa uainishaji wa HTTP hauitaji seva kuelewa njia zote (ambazo kwa kweli kuna zaidi ya 4) - GET pekee inahitajika, na pia haiambii seva inapaswa kufanya nini inapopokea ombi na programu fulani. njia. Hii inamaanisha kuwa seva inajibu ombi la DELETE /index.php HTTP/1.1 si wajibu futa ukurasa wa index.php kwenye seva, sawa na kwa ombi la GET /index.php HTTP/1.1 si wajibu rudisha ukurasa wa index.php kwako, inaweza kuifuta kwa mfano :)

REST inatumika

REST (Representational State Transfer) ni neno lililoanzishwa mwaka wa 2000 na Roy Fielding, mmoja wa wasanidi wa itifaki ya HTTP, kama jina la kikundi cha kanuni za kuunda programu za wavuti. Kwa ujumla, REST inashughulikia eneo pana zaidi kuliko HTTP - inaweza pia kutumika katika mitandao mingine na itifaki zingine. REST inaeleza kanuni za mwingiliano kati ya mteja na seva, kwa kuzingatia dhana za "rasilimali" na "kitenzi" (kinaweza kueleweka kama kiima na kiima). Kwa upande wa HTTP, rasilimali inatambuliwa na URI yake, na kitenzi ni mbinu ya HTTP.

REST inapendekeza kuachana na matumizi ya URI sawa kwa rasilimali tofauti (yaani, anwani za vifungu viwili tofauti kama /index.php?article_id=10 na /index.php?article_id=20 - hii sio njia ya REST) ​​na kutumia mbinu tofauti za HTTP kwa vitendo tofauti. Hiyo ni, programu ya wavuti iliyoandikwa kwa kutumia mbinu ya REST itafuta rasilimali wakati wa kuipata kwa njia ya HTTP DELETE (bila shaka, hii haina maana kwamba ni muhimu kutoa fursa ya kufuta kila kitu na kila mtu, lakini yoyote ombi la kufuta la programu lazima litumie mbinu ya HTTP DELETE).

REST huwapa watayarishaji programu uwezo wa kuandika programu za wavuti zilizosanifiwa na maridadi zaidi kuliko hapo awali. Kwa kutumia REST, URI ya kuongeza mtumiaji mpya haitakuwa /user.php?action=create (njia ya GET/POST), lakini kwa urahisi /user.php (njia ya POST kabisa).

Kama matokeo, kwa kuchanganya vipimo vya HTTP vilivyopo na mbinu ya REST, mbinu mbalimbali za HTTP hatimaye zinaeleweka. GET - inarudisha rasilimali, POST - inaunda mpya, PUT - inasasisha iliyopo, FUTA - inaifuta.

Matatizo?

Ndio, kuna shida ndogo ya kutumia REST katika mazoezi. Tatizo hili linaitwa HTML.

Maombi ya PUT/DELETE yanaweza kutumwa kwa kutumia XMLHttpRequest, kwa kuwasiliana na seva mwenyewe (sema, kupitia curl au hata kupitia telnet), lakini huwezi kutengeneza fomu ya HTML inayotuma ombi kamili la PUT/DELETE.

Jambo ni kwamba, maelezo ya HTML hayakuruhusu kuunda fomu zinazowasilisha data isipokuwa kupitia GET au POST. Kwa hiyo, kufanya kazi kwa kawaida na njia nyingine, unapaswa kuwaiga kwa njia ya bandia. Kwa mfano, katika Rack (utaratibu kwa msingi ambao Ruby huingiliana na seva ya wavuti; Reli, Merb na mifumo mingine ya Ruby hufanywa kwa kutumia Rack), unaweza kuongeza uwanja uliofichwa kwa fomu na jina "_method", na taja jina la njia kama thamani (kwa mfano, "PUT") - katika kesi hii, ombi la POST litatumwa, lakini Rack itaweza kujifanya kuwa imepokea PUT badala ya POST.

Mbinu za GET na POST katika HTTP na HTTPS ndizo njia mbili maarufu zaidi zinazotumiwa kuhamisha data kutoka kwa mteja hadi seva kwa kutumia HTTP (Itifaki ya Uhamisho ya HyperText). GET na POST zote zinaweza kutumika kutuma ombi na kupokea jibu, lakini kuna tofauti kubwa kati yao.

Tofauti kati ya maombi ya GET na POST katika HTTP au HTTPS ni swali maarufu katika kila mahojiano ya programu ya wavuti. Kwa kuwa HTML haitegemei teknolojia ya seva ya wavuti kama vile Java, ASP au PHP na HTTP ndiyo itifaki kuu katika nafasi ya mtandao, umuhimu wa kuelewa mbinu za GET na POST hauwezi kupuuzwa waziwazi. Katika makala haya, tutaangalia njia ya HTTP GET ni nini, njia ya HTTP POST ni nini, wakati wa kutumia kila ombi, na ni tofauti gani kati yao. Wacha tuangalie kila dhana tofauti.

HTML ni nini?

HTML ni lugha inayotumika kuunda kurasa za wavuti. Hypertext inarejelea viungo ambavyo ukurasa wa HTML unaweza kuwa nao. Lugha ya alama hurejelea jinsi lebo hutumika kufafanua mpangilio wa ukurasa na vipengele kwenye ukurasa.
Ufuatao ni mfano wa HTML unaotumika kufafanua ukurasa msingi wa wavuti wenye kichwa na aya moja ya maandishi:



<Голова>
<Название>TechTerms.com

<Тело>

Huu ni mfano wa aya katika HTML.

Mstari wa kwanza unabainisha aina ya maudhui yaliyomo kwenye hati., Na , ambayo yote yamejumuishwa katika mfano hapo juu. Kichwa cha ukurasa, metadata na viungo vya faili za nanga huwekwa kati ya maudhui halisi ya ukurasa huwekwa kati ya lebo. .

Wavuti imepitia mabadiliko mengi katika miongo michache iliyopita, lakini HTML imekuwa lugha ya msingi inayotumiwa kuunda kurasa za wavuti. Inafurahisha, wakati tovuti zimekuwa za juu zaidi na zinazoingiliana, HTML imekuwa rahisi. Ukilinganisha chanzo cha ukurasa wa HTML5 na ukurasa sawa ulioandikwa katika HTML 4.01 au XHTML 1.0, ukurasa wa HTML5 utakuwa na msimbo mdogo. Hii ni kwa sababu HTML ya kisasa inategemea Laha za Mtindo wa Kuachia au JavaScript kufomati karibu vipengele vyote ndani ya ukurasa.

Tovuti nyingi zinazobadilika hutengeneza kurasa za wavuti kwa haraka kwa kutumia lugha ya uandishi ya upande wa seva kama vile PHP au ASP. Hata hivyo, hata kurasa zinazobadilika lazima ziungwe kwa kutumia HTML. Kwa hivyo, lugha za uandishi mara nyingi hutoa nambari ya HTML inayotumwa kwa kivinjari cha wavuti.

Itifaki ya Uhawilishaji Maandishi ya HTTP imeundwa kwa ajili ya mawasiliano kati ya wateja na seva na inafanya kazi kama itifaki ya jibu la ombi.

Kivinjari cha wavuti kinaweza kuwa mteja, na programu kwenye kompyuta inayokaribisha tovuti inaweza kuwa seva.

Mteja (kivinjari) hutuma ombi la HTTP kwa seva, seva inarudi jibu ambalo lina habari kuhusu hali ya ombi na inaweza pia kuwa na maudhui yaliyoombwa.

Njia mbili za ombi GET na POST

Njia mbili zinazotumiwa sana za kujibu ombi kati ya mteja na seva ni:

    GET - inaomba data kutoka kwa rasilimali maalum;

    POST - hutuma data ili kuchakatwa kwa rasilimali maalum.

Tafsiri ya GET na POST ina maana halisi ya kupokea na baada ya kuchakata.

Zaidi kuhusu HTTP

HTTP ni itifaki inayotumika kusambaza data kupitia mtandao. Ni sehemu ya safu ya Itifaki ya Mtandao na inafafanua amri na huduma zinazotumiwa kusambaza data ya ukurasa wa wavuti.

HTTP hutumia modeli ya mteja wa seva. Mteja anaweza kuwa kompyuta ya nyumbani, kompyuta ndogo, au kifaa cha rununu. Seva ya HTTP kwa kawaida ni mwenyeji wa wavuti inayoendesha programu ya seva ya wavuti kama vile Apache au IIS. Mtumiaji anapofikia tovuti, kivinjari hutuma ombi kwa seva inayofaa ya wavuti na hujibu kwa msimbo wa hali ya HTTP. Ikiwa URL ni halali na muunganisho umekubaliwa, seva itatuma ukurasa wa wavuti na faili zinazohusiana kwa kivinjari.

Nambari za kawaida za hali ya HTTP ni pamoja na:

    200 - ombi lililofanikiwa (ukurasa wa wavuti upo);

    301 - Husogea kila mara (mara kwa mara huelekezwa upya kwa URL mpya);

    401 - ombi lisiloidhinishwa (idhini inahitajika);

    500 - Hitilafu ya seva ya ndani (mara nyingi husababishwa na usanidi usio sahihi wa seva).

POST na GET katika HTTP

HTTP inafafanua amri za GET na POST ambazo hutumika kuchakata mawasilisho ya fomu kwenye tovuti. Amri ya CONNECT inatumika kuwezesha muunganisho salama ambao umesimbwa kwa njia fiche kwa kutumia SSL. Miunganisho ya HTTP iliyosimbwa kwa njia fiche hutokea kupitia HTTPS, kiendelezi cha HTTP iliyoundwa kwa ajili ya uhamishaji salama wa data.

URL zinazoanza na "http://" zinaweza kufikiwa kupitia itifaki za kawaida za uhamishaji matini na kwa chaguo-msingi hutumia lango 80. URL zinazoanza na "https://" zinaweza kufikiwa kupitia muunganisho salama wa HTTPS na mara nyingi hutumia mlango wa 443.

POST

POST ni mfululizo wa majaribio ya mfumo unaofanywa na kompyuta na vifaa vingine vya kielektroniki vinapowashwa. Matokeo ya majaribio yanaweza kuonyeshwa kwenye skrini, kuonyeshwa kupitia taa zinazomulika LED, au kurekodiwa tu ndani. Katika mifumo ya kompyuta, operesheni ya POST inafanywa mwanzoni mwa mlolongo wa boot. Majaribio yote yakipita, mchakato uliosalia wa uanzishaji utaendelea kiotomatiki.

Mifumo ya uendeshaji ya vifaa vya Mac na Windows huendesha POST kila wakati kompyuta inapowasha au kuwasha upya. Uchanganuzi hukagua maunzi na kuhakikisha kuwa kichakataji, RAM, na vifaa vya kuhifadhi vinafanya kazi ipasavyo. Ikiwa hitilafu hutokea wakati wa POST, mchakato wa kuanza unaweza kusitisha au kuacha kabisa, na ujumbe unaweza kuonekana kwenye kufuatilia.Kwenye PC, makosa ya POST mara nyingi huonekana kwenye skrini ya habari ya BIOS. Zinaweza kuonekana kama misimbo ya kriptografia kama vile "08" au kama ujumbe wa mfumo kama vile "Hitilafu ya kurekebisha kumbukumbu ya mfumo." Kwenye Mac, makosa ya POST mara nyingi huonyeshwa na mchoro rahisi, kama vile ikoni ya folda iliyovunjika, ambayo inaonyesha kuwa kifaa cha kuwasha hakikupatikana.

Maonyesho ya kimwili

Katika baadhi ya matukio, skrini ya kompyuta inaweza hata kuwasha kabla ya hitilafu za POST. Hili likitokea, misimbo ya hitilafu inaweza kuonyeshwa kupitia taa za LED zinazomulika au milio. Kwa mfano, Apple iMac itacheza tani tatu mfululizo, sitisha kwa sekunde tano, na kisha kurudia tani wakati RAM mbaya imegunduliwa wakati wa kuanza. Kompyuta nyingi pia hulia wakati hitilafu za POST zinapogunduliwa, ingawa kila mtengenezaji hutumia misimbo yake.

POST ni neno la kiufundi ambalo mafundi wa kompyuta pekee hutumia mara kwa mara. Hata hivyo, ni kifupi kizuri kwa sababu hukusaidia kuelewa vyema ujumbe wa hitilafu ambao unaweza kuonekana kwenye kompyuta au vifaa vingine vya kielektroniki. Ikiwa kompyuta yako haitaanza kwa sababu ya hitilafu ya POST, unaweza kutumia kifaa kingine kupata maana na sababu ya hitilafu kutoka kwa tovuti ya mtengenezaji. Kisha unaweza kuchukua hatua inayofaa - kuondoa moduli ya kumbukumbu au kuweka tena kadi ya video na kisha kuanzisha upya vifaa.

PATA

POST pia ni mbinu ya kupitisha vigeu vya fomu za HTML kutoka ukurasa mmoja wa wavuti hadi mwingine bila kuvionyesha kwenye upau wa anwani. Njia mbadala ni GET, ambayo huongeza maadili kwa URL. Maombi ya HTTP POST hutoa data ya ziada kutoka kwa mteja (kivinjari) hadi kwa seva katika mwili wa ujumbe. Kinyume chake, maombi ya GET yanajumuisha data yote inayohitajika katika URL. Fomu katika HTML zinaweza kutumia mbinu yoyote kwa kubainisha method=POST au method=GET (chaguo-msingi) kwenye kipengele

. Njia iliyoainishwa huamua jinsi data ya fomu inavyowasilishwa kwa seva. Mbinu ya GET inapotumika, data yote ya fomu husimbwa kwenye URL kama vigezo vya mfuatano wa hoja. Kwa POST, data ya fomu inaonekana kwenye mwili wa ujumbe wa ombi la HTTP.

Tofauti katika Uwasilishaji wa Fomu

Mbinu ya ombi la POST inaomba seva ya wavuti kukubali na kuhifadhi data iliyoambatanishwa katika kiini cha ujumbe wa ombi. Mara nyingi hutumika wakati wa kupakia faili au kuwasilisha fomu iliyojazwa ya wavuti.

Mbinu ya ombi la HTTP GET hurejesha maelezo kutoka kwa seva. Kama sehemu ya ombi la GET, baadhi ya data inaweza kupitishwa katika mfuatano wa hoja wa URL, ikibainisha maneno ya utafutaji, masafa ya tarehe, au maelezo mengine yanayobainisha ombi.

Kama sehemu ya ombi la POST, kiasi kiholela cha data ya aina yoyote inaweza kutumwa kwa seva katika sehemu kuu ya ujumbe wa ombi. Sehemu ya kichwa katika ombi la POST kwa kawaida huonyesha aina ya midia ya mtandao ya kiini cha ujumbe.

Tofauti kuu kati ya maombi ya GET na POST ni kwamba yanalingana na maombi tofauti ya HTTP kama inavyofafanuliwa katika vipimo vya HTTP. Mchakato wa kuwasilisha kwa njia zote mbili huanza kwa njia ile ile: seti ya data ya fomu imeundwa na kivinjari na kisha imefungwa kwa namna iliyoelezwa na sifa ya enctype. Kwa METHOD="POST" sifa ya enctype inaweza kuwa multipart/form-data au application/x-www-form-urlencoded, ilhali kwa METHOD="GET" inaanzishwa tu kupitia application/x-www-form-urlencoded. Hii data ya fomu imewekwa kisha inatumwa kwa seva.

Ili kuwasilisha fomu kwa kutumia METHOD="GET", kivinjari huunda URL kwa kuchukua thamani ya sifa ya kitendo na kuiambatanisha kwenye seti ya data ya fomu, iliyosimbwa kwa kutumia aina ya maudhui ya programu/x-www-form-urlencoded). Kisha kivinjari huchukulia URL hii kana kwamba inaunganisha kwa kiungo (au kana kwamba mtumiaji ameandika URL mwenyewe). Kivinjari hugawanya URL katika sehemu na kutambua mwenyeji, kisha kutuma ombi la GET kwa seva pangishi pamoja na URL iliyosalia kama hoja. Ni muhimu kutambua kwamba mchakato huu unamaanisha kwamba fomu hizi ni mdogo kwa kanuni za ASCII. Uangalifu hasa unapaswa kulipwa kwa usimbaji na kusimbua aina zingine za herufi wakati wa kuzipitisha kwa URL ya ASCII.

Kuwasilisha fomu yenye METHOD="POST" husababisha ombi la POST kutumwa kwa thamani ya sifa ya kitendo na ujumbe unaotolewa kulingana na aina ya maudhui iliyobainishwa na sifa ya enctype.

PHP

PHP imejengwa katika HTML. Hii ina maana kwamba msimbo wa PHP unaweza kuingizwa kwenye ukurasa wa HTML. Msimbo wa PHP unasomwa au kuchanganuliwa na seva inayopangisha ukurasa. Matokeo ya vitendaji vya GET na POST katika PHP kwenye ukurasa kawaida hurejeshwa kama msimbo wa HTML unaoweza kusomwa na kivinjari. Kwa sababu msimbo wa PHP hubadilishwa kuwa HTML kabla ya ukurasa kupakia, watumiaji hawawezi kuona msimbo wa PHP kwenye ukurasa. Hii hufanya kurasa za PHP kuwa za kutosha kwa kupata hifadhidata na taarifa zingine salama.

Sintaksia nyingi za PHP hukopwa kutoka lugha zingine kama vile C, Java, na Perl. Hata hivyo, PHP ina idadi ya vipengele vya kipekee na vipengele maalum. Madhumuni ya lugha hii ni kuwawezesha wasanidi wavuti kuandika kurasa zinazozalishwa kwa nguvu haraka na kwa urahisi.

Wordpress

WordPress ni mfumo wa usimamizi wa maudhui bila malipo unaotumiwa kuunda na kudumisha tovuti. Urahisi wake wa kutumia na vipengele vya kipekee vya kublogi vimeisaidia kuwa zana maarufu zaidi ya kublogi kwenye Mtandao.

Kiolesura cha WordPress huruhusu mtu yeyote ambaye hana uzoefu wa ukuzaji wa wavuti kuunda na kuchapisha tovuti. Zana za kublogi zilizojengewa ndani hutoa njia rahisi ya kufuatilia machapisho ya kibinafsi, wageni, na maoni ya watumiaji.

Ingawa kuna maelfu ya violezo na programu jalizi za WordPress zinazopatikana, mfumo wa POST GET katika WordPress bado una mapungufu yake. Kwa kuwa ni huduma inayotegemea kiolezo, mtumiaji lazima aanze na tovuti iliyojengwa awali badala ya kuunda kurasa kutoka mwanzo. Zaidi ya hayo, hakuna uwezo wa kuingiza hati au kudumisha hifadhidata yenye kiwango sawa cha udhibiti ambacho tovuti maalum hutoa.

Zana ya POST_GET_ID() huruhusu hati kuchezea kipengee kwa kuwa kina kitambulisho cha kipekee na wakati wa kukiwasilisha kama fomu kupitia mbinu hizi menyu kunjuzi itawasilishwa na kitambulisho cha kipekee ambacho huruhusu hati kutambua ni chapisho gani linaendeshwa. Vinginevyo, kigezo kilichofichwa kinaweza kutumwa ambacho kingeruhusu hati kuona ni chapisho gani ni la mwonekano.

10/30/16 9.7K

Kuunda maombi ya POST kwa kutumia PHP

Njia ya kwanza ya kutekeleza ombi la PHP POST ni kutumia file_get_contents . Njia ya pili itatumia fread pamoja na kazi zingine kadhaa. Chaguo zote mbili hutumia stream_context_create chaguo za kukokotoa kujaza sehemu za kichwa cha ombi zinazohitajika.

Ufafanuzi wa Kanuni

Tofauti ya $sPD ina data ya kuhamishwa. Ni lazima iwe katika umbizo la mfuatano wa ombi la HTTP, kwa hivyo baadhi ya herufi maalum lazima zisimbwe.

Katika kazi ya faili_get_contents na kazi ya fread tuna vigezo viwili vipya. Ya kwanza ni use_include_path . Kwa kuwa tunatuma ombi la HTTP, itakuwa si kweli katika mifano yote miwili. Ikiwekwa kuwa kweli kusoma rasilimali ya ndani, chaguo la kukokotoa litatafuta faili kwa include_path .

Kigezo cha pili ni muktadha, ambao umejaa thamani ya kurudi ya stream_context_create, ambayo inachukua thamani ya safu ya $aHTTP.

Kwa kutumia file_get_contents kufanya maombi ya POST

Ili kutuma ombi la POST kwa kutumia file_get_contents katika PHP, unahitaji kutumia stream_context_create kujaza mwenyewe sehemu za kichwa na kubainisha ni "kanda" gani ya kutumia - katika kesi hii HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // Data ya POST $aHTTP = safu("http" => // Kanga ambayo itatumika safu("njia" => "POST", // Mbinu ya ombi // Vijajuu vya ombi vimewekwa chini ya "kichwa" => "Yaliyomo - aina: maombi/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, uongo, $context); echo $ yaliyomo;

Kutumia fread kufanya maombi ya POST

Unaweza kutumia kitendakazi cha fread kufanya maombi ya POST. Mfano ufuatao hutumia stream_context_create kutunga vichwa muhimu vya ombi la HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // Data ya POST $aHTTP = safu("http" => // Kanga ambayo itatumika safu("njia" => "POST", // Mbinu ya Ombi // Vijajuu vya ombi vimewekwa chini ya "kichwa" => "Yaliyomo - aina: maombi/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", uongo, $context); $ contents = ""; huku (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $ yaliyomo;

Kufanya Maombi ya GET na PHP

Sasa tutazingatia kutumia fread na file_get_contents kupakua maudhui kutoka kwenye mtandao kupitia HTTP na HTTPS. Ili kutumia mbinu zilizoelezwa katika makala hii, lazima uwezesha chaguo la fopen wrappers. Ili kufanya hivyo, unahitaji kuweka parameter allow_url_fopen kwa Washa katika faili ya php.ini.

Kutekeleza ombi la POST na GET katika PHP hutumiwa kuingia kwenye tovuti, kurejesha maudhui ya ukurasa wa wavuti, au kuangalia matoleo mapya ya programu. Tutashughulikia jinsi ya kutuma maombi rahisi ya HTTP.

Kutumia fread kupakua au kupokea faili kupitia Mtandao

Kumbuka kwamba usomaji wa ukurasa wa wavuti ni mdogo kwa sehemu inayopatikana ya pakiti. Kwa hivyo unahitaji kutumia kazi stream_get_contents ( sawa na file_get_contents) au kitanzi cha muda kusoma yaliyomo katika vipande vidogo hadi mwisho wa faili ufikiwe:

Katika kesi hii ya usindikaji ombi la PHP POST, hoja ya mwisho ya kazi ya fread ni sawa na ukubwa wa kipande. Kwa ujumla haipaswi kuwa zaidi ya 8192 ( 8*1024 ).

Hivi majuzi, nimekuwa nikiona maswali kwenye mkutano mkuu wa PHPClub juu ya mada ya kuunda ombi la POST na GET, na maswali juu ya mada: "Ninawezaje kutoa ombi la POST kwa kutumia kazi ya kichwa." Ninaamini kuwa hitaji la kuweka nukta katika utumiaji wa teknolojia hii limepitwa na wakati, kwa kuwa waandaaji programu wapya hawaelewi kanuni za wavuti kama hizo. Kwa hivyo, wacha tuanze safari yetu kupitia ulimwengu wa itifaki ya HTTP.

1. Itifaki ya HTTP. Utangulizi

Ningependa kufafanua jambo moja dogo mara moja. Itifaki ya maneno ya kutisha sio zaidi ya makubaliano ya watu wengi, kwa wakati mmoja tu watu waliamua: "Wacha tuifanye hivi, na kisha kila kitu kitakuwa sawa." Hakuna cha kuogopa, kila kitu ni cha kuchukiza na sasa tutafichua aibu hii. Kwa hivyo, itifaki ya HTTP ni nini na inatumika kwa nini?

1.1 Mteja na seva

Hakuna miujiza duniani, na hasa katika ulimwengu wa programu na mtandao! Kubali hili kama ukweli usiotikisika. Na, ikiwa programu haifanyi kazi au haifanyi kazi kama unavyotaka, basi, uwezekano mkubwa, imeandikwa vibaya au ina makosa. Kwa hivyo, kivinjari kinaulizaje seva kutuma chochote? Ndiyo, rahisi sana! Unahitaji tu kupumzika kidogo na kuanza kufurahiya mchakato :-)

1.2. Kuandika ombi letu la kwanza la HTTP

Ikiwa unafikiri kuwa kila kitu ni ngumu sana, basi umekosea. Mwanadamu ameundwa kwa njia ambayo hana uwezo wa kuunda kitu ngumu, vinginevyo yeye mwenyewe atachanganyikiwa ndani yake :-) Kwa hiyo, kuna kivinjari na kuna seva ya Mtandao. Kivinjari daima ni mwanzilishi wa kubadilishana data. Seva ya Wavuti haitawahi kutuma chochote kwa mtu yeyote ili itume kitu kwa kivinjari - lazima kivinjari kiombe. Ombi rahisi zaidi la HTTP linaweza kuonekana kama hii:

PATA http://www.php.net/ HTTP/1.0\r\n\r\n

  • PATA (iliyotafsiriwa kutoka kwa Kiingereza inamaanisha "pata") - aina ya ombi; aina ya ombi inaweza kuwa tofauti, kwa mfano POST, HEAD, PUT, DELETE (tutaangalia baadhi yao hapa chini).
  • http://www.php.net/ - URI (anwani) ambayo tunataka kupokea angalau baadhi ya taarifa (kwa kawaida, tunatarajia kujifunza ukurasa wa HTML).
  • HTTP/1.0 ni aina na toleo la itifaki ambayo tutatumia tunapowasiliana na seva.
  • \r\n ndio mwisho wa mstari, ambao lazima urudiwe mara mbili; kwa nini itakuwa wazi baadaye kidogo.
Unaweza kutekeleza ombi hili kwa urahisi sana. Endesha programu ya telnet.exe, ingiza www.php.net kama seva pangishi, bainisha port 80, na uandike ombi hili kwa kubonyeza Enter mara mbili kama \r\n\r\n. Kwa kujibu, utapokea msimbo wa HTML wa ukurasa kuu wa tovuti www.php.net.

1.3 Muundo wa ombi

Wacha tuangalie ombi la HTTP linajumuisha nini. Kila kitu ni rahisi sana. Wacha tuanze na ukweli kwamba ombi la HTTP ni maandishi yenye maana kabisa. Inajumuisha nini katika kesi ya jumla? Tutazingatia itifaki ya HTTP 1.0. Kwa hivyo:

Mstari wa Ombi [Kichwa-Mkuu | Ombi-Kichwa | Entity-Header ]\r\n[ Entity-Body ]

  • Mstari wa Ombi- kamba ya swala
  • Umbizo: "Njia ya Ombi-URI HTTP-Toleo\r\n"

  • Njia- Njia ambayo rasilimali ya Ombi-URI itachakatwa inaweza kuwa GET, POST, PUT, DELETE au HEAD.
  • Ombi-URI- kiungo cha jamaa au kabisa kwa ukurasa na seti ya vigezo, kwa mfano, /index.html au http://www.myhost.ru/index.html au /index.html?a=1&b=qq. Katika kesi ya mwisho, seva itatumwa ombi na seti ya anuwai a na b na maadili yanayolingana, na ishara "&" - ampersand - hutumika kama kitenganishi kati ya vigezo.
  • Toleo la HTTP- toleo la itifaki ya HTTP, kwa upande wetu "HTTP/1.0".

Tunavutiwa sana na mbinu za kuchakata GET na POST. Ukiwa na mbinu ya GET unaweza kupitisha tu vigezo kwa hati, na kwa njia ya POST unaweza kuiga uwasilishaji wa fomu.

Kwa njia ya GET, Ombi-URI linaweza kuonekana kama hii: "/index.html?param1=1¶m2=2".

  • Mkuu-Kichwa- sehemu kuu ya kichwa.
    Umbizo:
    Inaweza tu kuwa na vigezo viwili: Tarehe au Pragma. Tarehe - Tarehe ya Greenwich katika umbizo la "Siku ya juma, Mwezi wa Siku Mwaka HH:MM:SS GMT", kwa mfano, "Jumanne, 15 Nov 1994 08:12:31 GMT" - tarehe ya kuundwa kwa ombi. Pragma inaweza kuwa na thamani moja isiyo na kache, ambayo inalemaza uhifadhi wa ukurasa.
  • Ombi-Kichwa- sehemu ya kichwa inayoelezea ombi.

    Kichwa cha Ombi kinaweza kuwa na vigezo vifuatavyo: Ruhusu, Uidhinishaji, Kutoka, Ikiwa-Imebadilishwa-Tangu, Mrejeleaji, Ajenti-Mtumiaji.
    Katika sura hii, hatutazingatia parameter ya Uidhinishaji, kwa vile inatumiwa kufikia rasilimali za kibinafsi, ambazo hazihitajiki mara nyingi. Unaweza kujifunza jinsi ya kuunda kichwa cha ufikiaji kilichoidhinishwa mwenyewe kwenye www.w3c.org.

  • Ruhusu- huweka mbinu za usindikaji zinazokubalika.
    Umbizo: "Ruhusu: PATA | KICHWA\n".
    Kigezo hupuuzwa wakati wa kubainisha mbinu ya kuchakata POST katika Mstari wa Ombi. Hubainisha mbinu zinazokubalika za kuchakata ombi. Seva za seva mbadala hazibadilishi kigezo cha Ruhusu na hufikia seva bila kubadilika.
  • Kutoka- barua pepe ya mtu aliyetuma ombi.
    Umbizo: "Kutoka: adderss\r\n".
    Kwa mfano, "Kutoka: [barua pepe imelindwa]\r\n".
  • Ikiwa-Imebadilishwa-Tangu- inaonyesha kuwa ombi halijarekebishwa tangu wakati kama huo.
    Umbizo: "Ikiwa-Imebadilishwa-Tangu: tarehe\r\n"
    Inatumika kwa mbinu ya uchakataji wa GET pekee. Tarehe imebainishwa katika GMT katika umbizo sawa na kigezo cha Tarehe katika Kichwa-Kijumla.
  • Mrejeleaji- kiunga kabisa cha ukurasa ambao ombi lilianzishwa, i.e. kiunga cha ukurasa ambao mtumiaji alikuja kwetu.
    Umbizo: "Mrejeleaji: url\n".
    Mfano: "Mrejeleaji: www.host.ru/index.html\n".
  • Mtumiaji-Ajenti- aina ya kivinjari.
    Kwa mfano: "Wakala wa Mtumiaji: Mozilla/4.0\n"
  • Kichwa-Huluki- sehemu ya kichwa kinachoelezea data ya Mwili-Huluki.
    Sehemu hii ya ombi inabainisha vigezo vinavyoelezea mwili wa ukurasa. Kichwa-Huluki kinaweza kuwa na vigezo vifuatavyo: Ruhusu, Usimbaji-Yaliyomo, Urefu wa Maudhui, Aina ya Maudhui, Inaisha Muda, Iliyorekebishwa Mwisho, kichwa cha kiendelezi.
  • Ruhusu- kigezo sawa na Ruhusu kutoka kwa Mkuu-Kichwa.
  • Usimbaji wa Maudhui- Aina ya usimbaji wa data ya Entity-Body.
    Umbizo: "Usimbaji-Yaliyomo: x-gzip | x-compress | aina nyingine\n".
    Mfano: "Usimbaji wa Maudhui: x-gzip\n". Tabia ya "|". ina maana ya neno "au", yaani, hii au ile au ile, nk.
    Aina nyingine inaweza kuonyesha jinsi data inavyosimbwa, kwa mfano, kwa mbinu ya POST: "Content-Encoding: application/x-www-form-urlencoded\n".
  • Urefu wa Maudhui- idadi ya baiti zilizotumwa kwa Mwili wa Huluki. Thamani ya Urefu wa Maudhui ina maana tofauti kabisa kwa data iliyotumwa katika umbizo la MIME, ambapo hufanya kazi kama kigezo cha kuelezea sehemu ya data - "nje/chombo-mwili". Nambari halali ni nambari kamili kutoka sifuri na zaidi.
    Mfano: "Urefu wa Maudhui: 26457\n".
  • Aina ya Maudhui- aina ya data iliyopitishwa.
    Kwa mfano: "Aina ya Maudhui: maandishi/html\n".
  • Muda wake unaisha- Wakati ambapo ukurasa unapaswa kuondolewa kwenye kashe ya kivinjari.
    Umbizo: "Muda wake utaisha: tarehe\n". Umbizo la tarehe ni sawa na umbizo la tarehe la kigezo cha Tarehe kutoka kwa Kichwa-Kijumla.
  • Iliyorekebishwa Mwisho- wakati wa mabadiliko ya mwisho ya data iliyopitishwa.
    Umbizo: "Marekebisho ya Mwisho: tarehe\n". Umbizo la tarehe ni sawa na umbizo la tarehe la kigezo cha Tarehe kutoka kwa Kichwa-Kijumla.
  • ugani-header- sehemu ya kichwa, ambayo inaweza kuwa na lengo, kwa mfano, kusindika na kivinjari au programu nyingine inayopokea hati. Katika sehemu hii, unaweza kuelezea vigezo vyako katika umbizo la "ParameterName: parametervalue\n". Vigezo hivi vitapuuzwa ikiwa programu ya mteja haijui jinsi ya kuvichakata.
    Kwa mfano: "Kidakuzi: r=1\r\n" - huweka vidakuzi vinavyojulikana kwa ukurasa.

Na sasa, baada ya maneno hayo ya kutisha, hebu tujaribu kutuliza kidogo na kuelewa kile tunachohitaji? Kwa kawaida, tutaelewa kwa mifano.

Wacha tufikirie kuwa tunahitaji kupata ukurasa kutoka kwa wavuti kwa kupitisha Vidakuzi, vinginevyo tutatumwa tu kama wageni ambao hawajaalikwa, na zaidi ya hayo, inajulikana kuwa unaruhusiwa kupata ukurasa huu tu baada ya kutembelea ukurasa kuu wa tovuti.

2 Mbinu ya KUPATA

Hebu tuandike ombi letu.

PATA http://www.site.ru/news.html HTTP/1.0\r\n
Mwenyeji: www.site.ru\r\n

Kidakuzi: mapato=1\r\n
\r\n

Ombi hili linatuambia kwamba tunataka kupata yaliyomo kwenye ukurasa katika http://www.site.ru/news.html kwa kutumia mbinu ya GET. Sehemu ya mwenyeji inaonyesha kuwa ukurasa huu uko kwenye seva ya www.site.ru, uwanja wa Mrejeleo unaonyesha kuwa tulikuja kwa habari kutoka kwa ukurasa kuu wa tovuti, na uwanja wa Kuki unaonyesha kuwa tulipewa kidakuzi kama hicho na vile. Kwa nini nyuga za Mwenyeji, Mrejeleo na Vidakuzi ni muhimu sana? Kwa sababu watayarishaji programu wa kawaida, wakati wa kuunda tovuti zinazobadilika, angalia sehemu za data zinazoonekana katika hati (pamoja na PHP) katika mfumo wa vigeu. Hii ni ya nini? Ili, kwa mfano, kuzuia tovuti kuibiwa, i.e. hawakuweka programu juu yake kwa upakuaji wa moja kwa moja, au ili mtu anayetembelea tovuti apate daima kutoka kwa ukurasa kuu, nk.

Sasa hebu fikiria kwamba tunahitaji kujaza mashamba ya fomu kwenye ukurasa na kutuma ombi kutoka kwa fomu, basi kuwe na maeneo mawili katika fomu hii: kuingia na nenosiri (kuingia na nenosiri) - na, bila shaka, tunajua kuingia. na nenosiri.

PATA http://www.site.ru/news.html?login=Petya%20Vasechkin&password=qq HTTP/1.0\r\n
Mwenyeji: www.site.ru\r\n
Mrejeleaji: http://www.site.ru/index.html\r\n
Kidakuzi: mapato=1\r\n
\r\n

Kuingia kwetu ni "Petya Vasechkin" Kwa nini tunapaswa kuandika Petya%20Vasechkin? Hii ni kwa sababu herufi maalum zinaweza kutambuliwa na seva kama ishara za uwepo wa parameta mpya au mwisho wa ombi, nk. Kwa hivyo, kuna algorithm ya kusimba majina ya parameta na maadili yao ili kuzuia hali za makosa katika ombi. Maelezo kamili ya algoriti hii yanaweza kupatikana, na PHP ina kazi za rawurlencode na rawurldecode za usimbaji na kusimbua, mtawalia. Ningependa kutambua kuwa PHP hujipanga yenyewe ikiwa vigezo vilivyosimbwa vilipitishwa katika ombi. Hii inahitimisha sura ya kwanza ya kufahamiana kwangu na itifaki ya HTTP. Katika sura inayofuata tutaangalia maombi ya ujenzi kama vile POST (iliyotafsiriwa kutoka Kiingereza kama "tuma"), ambayo itakuwa ya kuvutia zaidi, kwa sababu. Hii ndiyo aina ya ombi linalotumika wakati wa kutuma data kutoka kwa fomu za HTML.

3. POST mbinu.

Kwa upande wa ombi la HTTP POST, kuna chaguo mbili za kuhamisha sehemu kutoka kwa fomu za HTML, yaani, kutumia algorithm ya programu/x-www-form-urlencoded na multipart/form-data algorithm. Tofauti kati ya algorithms hizi ni muhimu sana. Ukweli ni kwamba aina ya kwanza ya algorithm iliundwa muda mrefu uliopita, wakati lugha ya HTML bado haijatoa uwezekano wa kuhamisha faili kupitia fomu za HTML. Kwa hivyo, wacha tuangalie algorithms hizi kwa mifano.

3.1 Aina ya Maudhui: maombi/x-www-form-urlencoded.

Tunaandika ombi sawa na ombi letu la GET la kuhamisha kuingia na nenosiri, ambalo lilijadiliwa katika sura iliyotangulia:


Mwenyeji: www.site.ru\r\n
Mrejeleaji: http://www.site.ru/index.html\r\n
Kidakuzi: mapato=1\r\n
Aina ya Maudhui: programu/x-www-form-urlencoded\r\n
Urefu wa Maudhui: 35\r\n
\r\n

Hapa tunaona mfano wa kutumia sehemu za kichwa cha Aina ya Maudhui na Urefu wa Maudhui. Urefu wa Maudhui hueleza ni baiti ngapi eneo la data litachukua, ambalo linatenganishwa na kichwa kwa kukatika kwa mstari mwingine \r\n. Lakini vigezo ambavyo viliwekwa hapo awali katika Ombi-URI kwa ombi la GET sasa viko kwenye Mwili wa Huluki. Inaweza kuonekana kuwa zinaundwa kwa njia ile ile, unahitaji tu kuziandika baada ya kichwa. Ningependa kutambua jambo moja muhimu zaidi: hakuna kinachozuia, wakati huo huo na seti ya vigezo kwenye Mwili wa Taasisi, kuweka vigezo na majina mengine katika Ombi-URI, kwa mfano:

POST http://www.site.ru/news.html?type=user HTTP/1.0\r\n
.....
\r\n
login=Petya%20Vasechkin&password=qq

3.2 Aina ya Maudhui: data ya sehemu nyingi/fomu

Mara tu ulimwengu wa mtandao ulipogundua kuwa itakuwa vizuri kutuma faili kupitia fomu, muungano wa W3C ulianza kuboresha umbizo la ombi la POST. Kufikia wakati huo, umbizo la MIME (Upanuzi wa Barua za Mtandao wa Multipurpose - upanuzi wa itifaki wa madhumuni anuwai ya kutoa ujumbe wa Barua) ulikuwa tayari unatumika sana, kwa hivyo, ili tusiweze kuunda tena gurudumu, tuliamua kutumia sehemu ya umbizo la kizazi cha ujumbe huu kuunda. POST maombi katika itifaki ya HTTP.

Je! ni tofauti gani kuu kati ya umbizo hili na aina ya programu/x-www-form-urlencoded?

Tofauti kuu ni kwamba Chombo-Mwili sasa kinaweza kugawanywa katika sehemu, ambazo zimetenganishwa na mipaka (mpaka). Kinachovutia zaidi ni kwamba kila sehemu inaweza kuwa na kichwa chake kuelezea data iliyohifadhiwa ndani yake, i.e. katika ombi moja unaweza kuhamisha data ya aina mbalimbali (kama katika Barua ya Barua, unaweza kuhamisha faili kwa wakati mmoja na maandishi).

Basi hebu tuanze. Hebu fikiria tena mfano sawa na uhamisho wa kuingia na nenosiri, lakini sasa katika muundo mpya.

POST http://www.site.ru/news.html HTTP/1.0\r\n
Mwenyeji: www.site.ru\r\n
Mrejeleaji: http://www.site.ru/index.html\r\n
Kidakuzi: mapato=1\r\n

Urefu wa Maudhui: 209\r\n
\r\n
--1BEF0A57BE110FD467A \r\n
Muundo wa Maudhui: data-fomu; jina = "ingia" \r\n
\r\n
Petya Vasechkin \r\n
--1BEF0A57BE110FD467A \r\n
Muundo wa Maudhui: data-fomu; jina = "nenosiri" \r\n
\r\n
qq \r\n
--1BEF0A57BE110FD467A-- \r\n

Sasa hebu tuelewe kilichoandikwa. :-) Niliangazia haswa baadhi ya herufi \r\n kwa herufi nzito ili zisiunganishwe na data. Ukiangalia kwa makini, utagundua uga wa mpaka baada ya Aina ya Maudhui. Sehemu hii inabainisha kitenganishi cha sehemu - mpaka. Kamba inayojumuisha herufi na nambari za Kilatini, na vile vile alama zingine (kwa bahati mbaya, sikumbuki ni zipi zingine) zinaweza kutumika kama mpaka. Katika mwili wa ombi, "--" huongezwa kwa mwanzo wa mpaka, na ombi huisha na mpaka, ambayo wahusika "--" pia huongezwa hadi mwisho. Ombi letu lina sehemu mbili, ya kwanza inaelezea shamba la kuingia, na ya pili inaelezea shamba la nenosiri. Content-Disposition (aina ya data katika sehemu) inasema kwamba hii itakuwa data kutoka kwa fomu, na sehemu ya jina inabainisha jina la uwanja. Hapa ndipo kichwa cha sehemu kinapoishia na kinachofuata ni eneo la data la sehemu ambamo thamani ya sehemu imewekwa (hakuna haja ya kusimba thamani!).

Ningependa kuteka mawazo yako kwa ukweli kwamba hauitaji kutumia Urefu wa Yaliyomo kwenye vichwa vya sehemu, lakini kwenye kichwa cha ombi unapaswa na thamani yake ni saizi ya Mwili mzima wa Taasisi, ambayo inaonekana baada ya pili \ r\n kufuata Urefu wa Maudhui: 209\ r\n. Wale. Mwili wa Huluki umetenganishwa na kichwa kwa mapumziko ya ziada ya mstari (ambayo pia yanaweza kuonekana katika sehemu).

Sasa hebu tuandike ombi la kuhamisha faili.

CHAPISHO http://www.site.ru/postnews.html HTTP/1.0\r\n
Mwenyeji: www.site.ru\r\n
Mrejeleaji: http://www.site.ru/news.html\r\n
Kidakuzi: mapato=1\r\n
Aina ya Yaliyomo: data ya sehemu nyingi/fomu; mpaka=1BEF0A57BE110FD467A\r\n
Urefu wa Maudhui: 491\r\n
\r\n
--1BEF0A57BE110FD467A \r\n
Muundo wa Maudhui: data-fomu; jina="news_header" \r\n
\r\n
Mfano habari \r\n
--1BEF0A57BE110FD467A \r\n
Muundo wa Maudhui: data-fomu; jina="faili_ya_habari"; filename="news.txt" \r\n
Aina ya Yaliyomo: application/octet-stream \r\n
Content-Transfer-Encoding: binary \r\n
\r\n
Na hii ndio habari, ambayo iko kwenye faili ya news.txt \r\n
--1BEF0A57BE110FD467A-- \r\n

Katika mfano huu, sehemu ya kwanza hutuma kichwa cha habari, na sehemu ya pili hutuma faili ya news.txt. Ikiwa uko makini, utaona sehemu za jina la faili na Aina ya Maudhui katika sehemu ya pili. Sehemu ya jina la faili inabainisha jina la faili inayotumwa, na sehemu ya Aina ya Maudhui inabainisha aina ya faili hii. Application/octet-stream inaonyesha kuwa huu ni mtiririko wa kawaida wa data, na Content-Transfer-Encoding: binary inaonyesha kuwa hii ni data ya jozi, haijasimbwa kwa njia yoyote.

Jambo muhimu sana. Maandishi mengi ya CGI yameandikwa na watu werevu, kwa hivyo wanapenda kuangalia aina ya faili inayoingia, ambayo iko katika Aina ya Yaliyomo. Kwa ajili ya nini? Mara nyingi, kupakia faili kwenye tovuti hutumiwa kupokea picha kutoka kwa mgeni. Kwa hivyo, kivinjari chenyewe kinajaribu kuamua ni aina gani ya faili ambayo mgeni anataka kutuma na kuingiza Aina ya Yaliyomo kwenye ombi. Hati huiangalia baada ya kupokelewa, na, kwa mfano, ikiwa sio gif au jpeg, inapuuza faili hii. Kwa hivyo, wakati wa kuunda ombi kwa mikono, tunza Thamani ya Aina ya Yaliyomo ili iwe karibu na umbizo la faili iliyohamishwa.

Katika mfano wetu, ombi linatolewa ambalo faili ya maandishi huhamishwa. Ombi la kuhamisha faili ya binary linatolewa kwa njia ile ile.

4. Hati ya posta.

Nadhani haifai kuzungumza kwa undani juu ya kutuma maombi kwa seva. Hili ni suala la teknolojia ya RHP :-). Inatosha kusoma kwa uangalifu sehemu ya kazi za kufanya kazi na soketi, au juu ya kazi za moduli ya CURL kwenye nyaraka rasmi za PHP.

Kutoka kwa hapo juu, natumai sasa ni wazi kwa nini swali ni: "Ninawezaje kutoa ombi la POST kwa kutumia kazi ya kichwa?" - isiyo na maana. Kazi ya kichwa(kamba) inaongeza kiingilio tu kwa kichwa cha ombi, lakini sio kwa mwili wa ombi.

Kuna aina nyingine ya ombi - Content-Type: multipart/mixed, natumaini baada ya kusoma makala hii utaelewa kwa urahisi aina hii mwenyewe. Unaweza kuisoma kwa undani