1C-დან მიღების მოთხოვნები გაორმაგებულია. http-ის მოთხოვნის გადამისამართების მართვა

1C-დან ინფორმაციის გაგზავნის პროცედურის შემუშავებისას საიტზე პლატფორმის ვერსიით 8.3.9.2170, შემექმნა პრობლემა: საიტის შემქმნელმა მომცა ჩაწერის შესაძლებლობა. საჭირო ინფორმაციამხოლოდ დახმარებით HTTP მოთხოვნა PUT მეთოდის გამოყენებით.

ორჯერ დაფიქრების გარეშე, მე გამოვხატე მარტივი კოდი:

კავშირი = ახალი HTTPConnection ("www.mysite.ru"); ჰედერები = ახალი მატჩი; Headers["Content-Type"] = "აპლიკაცია/x-www-form-urlencoded"; მოთხოვნა = New HTTPRequest("/api/order_items/93076?order_item=30", Headers); კავშირი.Write(Request);

შესრულების შედეგებიდან გამომდინარე, საწყობში მიღებული საქონლის რაოდენობა უნდა შეტანილიყო ვებგვერდზე მყიდველის შეკვეთის შესაბამის ხაზში.

თუმცა, როგორც უკვე მიხვდით, არაფერი მომხდარა. მას შემდეგ რაც დავრწმუნდი, რომ საიტზე შეცდომები არ იყო (მსგავსი მოთხოვნის გაგზავნით Chrome-ის მოდულის საშუალებით), გავუშვით იგი ჩემს ლოკალური კომპიუტერივებ სერვერზე და დაიწყო ექსპერიმენტები.

უცნაური რამ მაშინვე გაირკვა: ზემოთ მოყვანილი კოდი არ წარმოქმნის PUT, არამედ HEAD მოთხოვნას!

Apache-ს ჟურნალებში ვნახე შემდეგი:

127.0.0.1 - - "HEAD /api/order_items/93076?order_item=30 HTTP/1.1"

ცოტა გამიკვირდა (ბოლოს და ბოლოს, სახელმძღვანელოში წერია PUT შავი და თეთრი), მაგრამ არ დავბნეულვარ - შეგიძლიათ პირდაპირ დარეკოთ მეთოდი:

კავშირი.CallHTTPMმეთოდი("PUT",მოთხოვნა);

ჟურნალები იგივეს აჩვენებს:

127.0.0.1 - - "HEAD /api/order_items/93076?order_item=30 HTTP/1.1"

"იქნებ რაღაცას არასწორად ვაკეთებ?" - ჩემს თავს კითხვა დავუსვი. მაგრამ არ იყო მინიშნებები ინტერნეტში ან სახელმძღვანელოებში. ჰოდა, ჯერ არავის გაუუქმებია მეცნიერული ცურვის მეთოდი. დასაწყისისთვის მე ვცადე ამის გაკეთება:

Connection.CallHTTPMethod("fyvfyv",Request);

მე მივიღე ჟურნალებში:

127.0.0.1 - - "?????? /api/order_items/93076?order_item=30 HTTP/1.1"

საინტერესოა, ეს ნიშნავს, რომ 1C ცვლის PUT მეთოდს კონკრეტულად (რატომ არ მოეწონა 1C?).

კიდევ რამდენიმე ცდის შემდეგ მივიღე ეს:

კავშირი.CallHTTPMმეთოდი("PUT",მოთხოვნა);

მე მივიღე ჟურნალებში:

127.0.0.1 - - "PUT /api/order_items/93076?order_item=30 HTTP/1.1"

და ეს ვარიანტი უკვე მუშაობდა საიტზე და ყველა ბედნიერი იყო.

მან შესთავაზა პრობლემის უფრო სწორი გადაწყვეტა: თქვენ უნდა მიუთითოთ მოთხოვნის ორგანო, ნებისმიერი ორგანო, თუნდაც ცარიელი. მაგალითად, ეს ვარიანტი იმუშავებს:

კავშირი = ახალი HTTPConnection ("www.mysite.ru"); ჰედერები = ახალი მატჩი; Headers["Content-Type"] = "აპლიკაცია/x-www-form-urlencoded"; მოთხოვნა = New HTTPRequest("/api/order_items/93076?order_item=30", Headers); Request.SetBodyFromString("",TextEncoding.UTF8, UseByteOrderMark.NotUse); დაკავშირება.Write(Request);

და, ალბათ, საკმაოდ სწორია პარამეტრის მნიშვნელობების თავად გადაცემა მოთხოვნის სხეულში.

დასკვნა ასეთია: 1C პლატფორმა თვლის PUT მოთხოვნას სხეულის გარეშე, როგორც მცდარი და ცვლის მეთოდს HEAD-ით.

საინტერესოა, რომ 1C არ აკონტროლებს POST მოთხოვნას სხეულის გარეშე და არ აქცევს მას GET-ად, მე შევამოწმე გასართობად.

როგორც ცნობილი ვოვოჩკა იტყოდა ცნობილი ხუმრობიდან: "სად არის ლოგიკა?"

იმედი მაქვს, ჩემი პუბლიკაცია ვინმეს გადაარჩენს სიცოცხლის რამდენიმე საათს პასუხის ძიებაში. =)))

1C Enterprise 8.3 პლატფორმაზე შესაძლებელი გახდა HTTP სერვისების შექმნა

ჩაშენებული ენის გამოყენებით, ახლა შეგიძლიათ შექმნათ პასუხი მოთხოვნაზე. ამავდროულად, თქვენ გაქვთ მოსახერხებელი წვდომა სხეულზე, სათაურებზე და წყაროს ხაზზე მოთხოვნა, ასევე შესაძლებელია კოდის, სხეულისა და ჰედერების გენერირება პასუხითქვენი შეხედულებისამებრ.

SOAP პლატფორმაზე არსებულ ვებ სერვისებთან შედარებით, HTTP სერვისებს აქვს მრავალი უპირატესობა:

  • ასეთი სერვისების კლიენტის დაპროგრამების სიმარტივე;
  • პოტენციურად ნაკლები მონაცემების გადაცემა;
  • პოტენციურად დაბალი გამოთვლითი დატვირთვა;
  • HTTP სერვისები ორიენტირებულია "რესურსებზე", ხოლო SOAP სერვისები "მოქმედებაზე" ორიენტირებული.

მონაცემთა ბაზა აჩვენებს http სერვისების განხორციელებას

http-სერვისის ინვოისების სია

http სერვისი იყენებს URL-ის შაბლონებს და ახორციელებს ქონების დამუშავებას ParametersURLობიექტი HTTPSserviceRequest
IN ამ მაგალითშიგვიჩვენებს, თუ როგორ შეგიძლიათ შექმნათ spacer ბაზა სამუშაო ბაზასა და კორპორატიულ ვებსაიტს შორის
კავშირი ხდება დემო მონაცემთა ბაზასთან " ვაჭრობის მენეჯმენტი 11", რომელშიც ჯერ დირექტორია "კონტრაგეტები" თქვენ უნდა დააყენოთ დამატებითი ქონება სახელით ვებ პაროლი , სადაც შევინახავთ წვდომის პაროლს.
შემდეგი URL პარამეტრები გაეგზავნება http მოთხოვნას: TIN როგორც შესვლა და პაროლი.
მოთხოვნის დამუშავებისას კავშირი ხდება ComConnector-ის საშუალებით UT-თან (მუხრუჭები გარანტირებულია) და იქიდან ხდება სინჯის აღება.
მე არ ვამბობ, რომ ეს გამოსავალი არის სწრაფი ან უსაფრთხო, ეს მხოლოდ მაგალითია

Ისე. ახალი ფილიალი გამოჩნდა მეტამონაცემების ხეში - HTTP სერვისები
ჩვენ ვქმნით ახალი სერვისი, მიუთითეთ მისი სახელი და ძირეული URL(სია)
root URL გამოყენებული იქნება ჩვენი http სერვისის დასარეკად
შემდეგი, დაამატეთ URL-ის შაბლონი http სერვისს, შაბლონად მიუთითეთ „/(შესვლა)/(პაროლი)“.
ეს შაბლონი საშუალებას მოგცემთ მიიღოთ პარამეტრების შესაბამისი სტრუქტურა და მათი მნიშვნელობები URL პარამეტრებში http მოთხოვნის დამუშავებისას.
ახლა, ჩვენს URL-ის შაბლონს დავამატებთ მეთოდს სახელწოდებით "get", აირჩიეთ GET როგორც http მეთოდი
გახსენით დამმუშავებელი და ჩაწერეთ კოდი
მეთოდის დამმუშავებელი არის ფუნქცია, რომელიც უნდა დააბრუნოს ტიპის მნიშვნელობა HTTPSserviceResponse

http-სერვისის შეკვეთის სტატუსი

მაგალითი ახორციელებს POST მეთოდით გადაცემული ცვლადების დამუშავებას და HTML გვერდის სახით პასუხის წარმოქმნას.
ამჯერად მონაცემების ნიმუშები ხდება მონაცემთა ბაზიდან, სადაც განთავსებულია hs, ასე რომ, ის ბევრად უფრო სწრაფად მუშაობს, ვიდრე წინა http სერვისი.
სამუშაო სისტემის დანერგვისას აზრი აქვს მონაცემთა ბაზაში ობიექტების შექმნას (სერვისით) და მონაცემთა მიგრაციის კონფიგურაციას წყაროს მონაცემთა ბაზიდან (მაგალითად, ცალკე ფონის პროცესი). http მოთხოვნის დამუშავებისას, ნიმუშის აღება ხდება უშუალოდ მონაცემთა ბაზიდან, სადაც ის მდებარეობს.

გამოცემა

არსებობს უამრავი ინფორმაცია ვებ სერვერის ინსტალაციისა და კონფიგურაციის შესახებ.
მე გამოვიყენე build httpd-2.2.25-win32-x86-openssl-0.9.8y.exe აქედან
დაინსტალირებულია "შემდეგი-შემდეგი-დასრულება" მეთოდით :)
http სერვისების გამოცემა მდებარეობს იმავე ადგილას, სადაც იყო და არის ვებ სერვისების გამოქვეყნება და არ არის განსაკუთრებით განსხვავებული.
ვებ სერვერის "კონფიგურატორის" რეჟიმში დაყენების შემდეგ გადადით მენიუში "ადმინისტრაცია" - "გამოქვეყნება ვებ სერვერზე"
"HTTP სერვისების" ჩანართზე ჩვენ ვაყენებთ პუბლიკაციის სახელს, ვებ სერვერს, პუბლიკაციების დირექტორიას და აღვნიშნავთ ჩვენს სერვისებს (ჩემს შემთხვევაში სახელი არის "web", Apache ვებ სერვერი 2.2)
გამოქვეყნებისას შესაბამისი ბლოკები ავტომატურად იწერება httpd.conf კონფიგურაციის ფაილში და სერვერის გადატვირთვა ხდება (პირველი გამოქვეყნებისას)
დარეკვა http სერვისზე
მაგალითი: http://mysite/web/hs/list, სად
mysite– სერვერის მისამართი (თუ ვებ სერვერი დაინსტალირებულია ადგილობრივად, შეგიძლიათ გამოიყენოთ 127.0.0.1)
ვებ- გამოქვეყნების დროს მითითებული სახელი (სხვა სახელი)
ჰს– სავალდებულო ბილიკის სეგმენტი, რომელიც ეუბნება სერვერს, რომ მუშაობა მოხდება http სერვისებით
სია– ვებ სერვისის root url

ტესტირება

ინვოისების სია

http://127.0.0.1/web/hs/list/7705260681/pswMP (არ დაგავიწყდეთ UT-ში დამატებითი საკუთრების დაყენება პაროლისთვის)

ვარაუდობენ, რომ დოკუმენტების რეესტრში შესასვლელად მომხმარებელი იყენებს პირდაპირ ბმულს, რომელიც შეიცავს INN-ს და პაროლს

შეკვეთის სტატუსი

http://127.0.0.1/web/hs/check

მოთხოვნა და პასუხი განთავსებულია იმავე URL-ზე. გვერდზე შესვლისას ირთვება GET მეთოდი, რომელიც აბრუნებს html ფორმას

როდესაც დააწკაპუნებთ „შემოწმებას“, შეკვეთის ნომერი იგზავნება POST მეთოდის გამოყენებით იმავე URL-ზე, პასუხი უბრუნდება იგივე მოთხოვნის ფორმას, რომელსაც ემატება მოთხოვნილი შეკვეთის მონაცემები.

თანდართულ ფაილში არის მონაცემთა ბაზის ჩამოტვირთვა 1C 8.3-ისთვის. კონფიგურაცია მოიცავს 2 http სერვისს (პუბლიკაციიდან), დემო მონაცემთა ბაზასთან UT 11 com კავშირის დაყენებას და დოკუმენტს „შეკვეთა“.

რაც გჭირდებათ გასაშვებად და შესამოწმებლად

  • ვებ სერვერი
  • ნებისმიერი ვებ ბრაუზერი
  • მიმდინარე გამოშვება1C: საწარმო 8.3

კარგად, აქ არის XML ფაილის დამუშავების მაგალითი სერვერის მხარეს კონტრაგენტებთან:

VBS კოდი
მოითხოვს_ერთჯერ dirname(__FILE__) . "/../inc/initf.php" ;
კლასი Onec_Import_Customers (
კერძო სტატიკური $მაგალითი;
ფუნქცია __კონსტრუქცია())(

თვით::$მაგალითი = $this ;

საჯარო ფუნქციის პროცესი() (
$rawHttp = file_get_contents ("php://input") ;
$xml_raw = str_replace("xml=", "", $rawHttp) ;

თუ ($_SESSION["შესული"] || მართალია)(
file_put_contents("log/onec_import_customers_" .time(). ".log", "REQUEST" . print_r($_REQUEST, 1) . "SERVER" . print_r($_SERVER,1). "FILES" . print_r($_FILES, 1) .$xml_raw) ;
file_put_contents("log/onec_import_customers_last.log", "REQUEST" . print_r($_REQUEST, 1) . "SERVER" . print_r($_SERVER,1). "FILES" . print_r($_FILES,1) ; $xml_raw) .

//$xml = ზოლები ($_POST["xml"]);
$xml = stripslashes ($xml_raw);
if(!$xml) (
$xml = $xml_raw ;
//die ("XML მონაცემები არ არის (პოსტ გასაღები "xml")");
}
if ($this->setCustomers($xml)) (
die ("OK");
) სხვა (
die ("Fail");
}
) სხვა (
die();
}
}

პირადი ფუნქცია setCustomers($xml)(
$db = db::getInstance() ;

$sxml = simplexml_load_string($xml) ;

$customers = $sxml->("Р"РѕРіРѕРІРѕСЂ") ? $sxml->("РІРѕРіРѕРІРѕСЂ") : self::err("ფაილის ფორმატი არასწორია. კლიენტები.") ;

$final = მასივი () ;
$k = 0 ;

$allCustomers = მასივი () ;

Foreach ($customers როგორც $cust) (
$პაროლი = ბაზა::generatePassword(6,1) ;

$arr ["პაროლი"] = $პაროლი ;

$arr ["ელფოსტა"] = (მასივი)$cust->("Почта") ;//? (მასივი)$cust->("Почта") : self::err("ფაილის ფორმატი არასწორია. კლიენტის ნომერი:" . $k . ". არასწორი ელფოსტა") ;
$arr ["email"] = $arr ["email"] ? $arr ["email"] : "";//: self::err("არასწორი ფაილის ფორმატი. კლიენტის ნომერი:" . $k . ". არასწორი ელფოსტა" ;

$arr ["აპის_სახელი"] = (მაივი)$cust->("РќР°Ременование") ;//? (მასივი)$cust->("РќР°Ременование") : self::err("ფაილის ფორმატი არასწორია. კლიენტის ნომერი:" . $k . "არასწორი სახელი" ;
$arr ["app_name"] = $arr ["app_name"] ? $arr ["app_name"] : "";//self::err("არასწორი ფაილის ფორმატი. კლიენტის ნომერი:" . $k. ". არასწორი სახელი") ;

$arr ["clientid"] = (მაივი)$cust->("Номер") ? (მასივი)$cust->("Номер") : self::err("ფაილის ფორმატი არასწორია. კლიენტების არა:" . $k . ". არასწორი კლიენტი" ;
$arr ["clientid"] = $arr ["კლიენტიდი"] ? $arr ["clientid"] : self::err("არასწორი ფაილის ფორმატი. კლიენტების არა:" . $k . ". არასწორი კლიენტი" ;

$arr ["თარიღი"] = (მასივი)$cust->("Дата”) ? (მასივი)$cust->("Р"ата") : self::err("არასწორი ფაილის ფორმატი. კლიენტების არა:" . $k." ". არასწორი თარიღი" ;
$arr ["თარიღი"] = $arr ["თარიღი"] ? $arr ["თარიღი"] : self::err("ფაილის ფორმატი არასწორია. კლიენტები არა:" . $k. ". არასწორი თარიღი" ;

$arr ["თარიღი"] = აფეთქება (".",$arr ["თარიღი"]);
krsort($arr ["თარიღი"]);
$arr ["თარიღი"] = implode("-",$arr ["თარიღი"]) . "00:00:00" ;

$arr ["phone_home"] = (მასივი)$cust->("ТелефоРS") ;//? (მასივი)$cust->("ТелефоРС") : self::err("ფაილის ფორმატი არასწორია. კლიენტების არა:" . $k . ". არასწორი ტელეფონი") ;
$arr ["phone_home"] = $arr ["phone_home"] ? $arr ["phone_home"] : "";//self::err("ფაილის ფორმატი არასწორია. კლიენტები არა:" . $k . ". არასწორი ტელეფონი" ;

$arr ["რაიონი"] = (მასივი)$cust->("РайоРС") ;//? (მასივი)$cust->("айон") : self::err("ფაილის ფორმატი არასწორია. კლიენტების არა:" . $k . ". არასწორი უბანი" ;
$arr ["District"] = $arr ["District"] ? $arr ["რაიონი"] : "";//self::err("ფაილის ფორმატი არასწორია. კლიენტების არა:" . $k. ". არასწორი უბანი" ;

$arr ["ქუჩა"] = (მასივი)$cust->("Улица") ;//? (მასივი)$cust->("Улица") : self::err("ფაილის ფორმატი არასწორია. კლიენტების არა:" . $k . ". არასწორი ქუჩა") ;
$arr ["ქუჩა"] = $arr ["ქუჩა"] ? $arr ["ქუჩა"] : "";//self::err("ფაილის ფორმატი არასწორია. კლიენტები არა:" . $k . ". არასწორი ქუჩა" ;

$arr ["შენობა"] = (მასივი)$cust->("Р"РѕРј") ;//? (მასივი)$cust->("Р"РѕРј") : self::err("არასწორი ფაილის ფორმატი. კლიენტების არა:" . $k . ". არასწორი შენობა") ;
$arr ["building"] = $arr ["შენობა"] ? $arr ["building"] : "" ;//self::err("ფაილის ფორმატი არასწორია. კლიენტები არა:" . $k. ". არასწორი შენობა" ;

$arr ["აპარტამენტი"] = (მასივი)$cust->("Квартира") ;//? (მასივი)$cust->("Квартира") : self::err("ფაილის ფორმატი არასწორია. კლიენტების არა:" . $k . ". არასწორი ბინა") ;
$arr ["apartment"] = $arr ["ბინა"] ? $arr ["apartament"] : "";// self::err("ფაილის ფორმატი არასწორია. კლიენტების არა:" . $k . ". არასწორი ბინა" ;

$allCustomers [$arr ["clientid"]]= array("password"=>$password, "email"=>$arr ["email"]) ;

$final = $arr ;
+$k ;
}

დააბრუნეთ $this->buildCustomers($final) ;
/*
if($this->buildCustomers($final)) (
foreach ($allCustomers როგორც $clientid=>$data) (
self::sendPasswordToMail($data["email"], $clientid, $data["პაროლი"]);
}
}*/

პირადი სტატიკური ფუნქცია sendPasswordToMail($email, $client_id, $password) (
$db = db::getInstance() ;
$config = config_model::getInstance() ;
$lng = მოთხოვნა::$currentLang["id"] ;
$email_text = $db->getRow("s1_text", "*", "`alias`="registration_ok" AND `lng_id`="($lng)"");
$body = str_replace("%პაროლი%", $პაროლი, $email_text["შინაარსი"]) ;
$body = str_replace("%client_id%", $client_id, $body) ;
base::mailSend($body, $email_text["title"] . " - " . $config->defaultTitle("site.ru") , $email, $app["app_name"], $config->site_admin_mail( " [ელფოსტა დაცულია]"), $config->from_name("საიტი")) ;

პირადი ფუნქცია buildCustomers ($data) (

$db = db::getInstance() ;

$qry = "I_insert INTO s1_customer ("აქტიური", "პაროლი", `app_name`,`ელფოსტა`, `თარიღი`, `კლიენტი`, `phone_home`, `ქუჩა`, `უბანი`, `შენობა`, `ბინა `) ღირებულებები“;
foreach ($data $rows)(
$queryArr = "(
"0"
,MD5("($rows["პაროლი">")
"($db->escape($rows["app_name"]))"
"($db->escape($rows["email"]))"
"($db->escape($rows["თარიღი"]))"
,"($db->escape($rows["clientid"]))"
,"($db->escape($rows["phone_home"]))"
"($db->escape($rows["ქუჩა"]))"
,"($db->escape($rows["რაიონი"]))"
,"($db->escape($rows["building"]))"
,"($db->escape($rows["ბინა"]))"
)" ;
}
$qry .= implode(",", $queryArr) ;
$qry .= " დუბლიკატი გასაღების განახლებაზე
`აპის_სახელი` = VALUES (აპის_სახელი)
,`თარიღი` = VALUES(თარიღი)
,`ელფოსტა` = VALUES(ელფოსტა)
,`phone_home` = VALUES (phone_home)
,`ქუჩა` = VALUES(ქუჩა)
,`რაიონი` = VALUES(რაიონი)
,`შენობა` = VALUES(შენობა)
,`ბინა` = VALUES(ბინა)
" ;
დაბრუნება $db->query($qry) ;
}

საჯარო სტატიკური ფუნქცია getInstance())(
თუ (!self::$მაგალითად)
{
ახალი თვით() ;
}
დაბრუნება self::$instance ;

პირადი სტატიკური ფუნქცია err($msg) (
გადაყარეთ ახალი ImportException($msg) ;
}

კლასი ImportException ავრცელებს გამონაკლისს (

ფუნქცია __კონსტრუქცია ($msg) (
die ("შეცდომა: " . $msg);

პლატფორმის მე-8 ვერსიიდან დაწყებული, მომხმარებლებს და დეველოპერებს აქვთ შესაძლებლობა გამოიყენონ http მოთხოვნა პირდაპირ 1C-ში. პროგრამა მხარს უჭერს ორი ტიპის შეკითხვებს:

  • POST მოთხოვნები;
  • მიიღეთ მოთხოვნები.

ამრიგად, შეიქმნა საკმაოდ მოსახერხებელი ინსტრუმენტი მონაცემთა გაცვლისა და http-ის საშუალებით მოქმედ ვებ სერვისებთან და სერვისებთან ურთიერთობისთვის.

მიიღეთ მოთხოვნა

რა თქმა უნდა, მოთხოვნების გამოყენების უმარტივესი მაგალითები ასახავს მათ შესაძლებლობებს ბევრად უკეთ, ვიდრე აღწერილობის მრავალი ხაზი. ასე რომ, ვცადოთ:

  1. მოდით მივიღოთ ჩვენი საიტის მთავარი გვერდის ძირითადი ნაწილი;
  2. ჩვენ ვიმუშავებთ მოთხოვნის გადამისამართებაზე;
  3. ავიღოთ სურათი საიტიდან.

საიტის სხეულის მიღება

დავიწყოთ რაღაც მარტივით. ნახ..

კოდის ამ მონაკვეთის შესრულების შედეგი არის საკმაოდ დიდი ტექსტი, რომლის ბოლო მონაკვეთი ნაჩვენებია ნახ.2-ზე.

ნახ.2

კოდის პირველ სტრიქონში ჩვენ ვქმნით კავშირის ობიექტს http რესურსთან. ობიექტი შეიძლება შეიცავდეს შემდეგ თვისებებს:

  • სერვერი - კავშირის სტრიქონი, რომელიც შეიცავს სერვერის მისამართს;
  • პორტი – შეიცავს ნომერს, რომელიც მიუთითებს სერვერის პორტზე, კავშირის ტიპის მიხედვით, შეგიძლიათ მიუთითოთ 80; დაუცველი კავშირებიან 443 დაცული SSL-ისთვის.
  • მომხმარებლის სახელი – მითითებულია, თუ საჭიროა სერვერზე ავტორიზაცია;
  • პაროლი – მომხმარებლის პაროლი მითითებულ რესურსზე;
  • პროქსი – შეიძლება შეიცავდეს InternetProxy ტიპის ობიექტს, რომელიც მითითებულია, როდესაც პროქსი გამოიყენება სერვერთან კომუნიკაციისთვის;
  • უსაფრთხო კავშირი - ნაგულისხმევი მნიშვნელობა არის FALSE, TRUE-ზე გადასვლა მიუთითებს https პროტოკოლის გამოყენებაზე.

გარდა ამისა, HTTPConnection ობიექტს აქვს საკუთარი მეთოდები, გამოძახება, რომელიც საშუალებას გაძლევთ უფრო სრულად აღწეროთ დამმუშავებლის შესრულების ალგორითმი:

  • CallHTTPmethod – შეიცავს ორ აუცილებელ პარამეტრს, HTTPmethod და HTTPrequest, მხარს უჭერს მესამე პარამეტრში მითითებულ ფაილზე პასუხის სხეულის ჩაწერის შესაძლებლობას;
  • Write – PUT მოთხოვნის გამოყენებით, აგზავნის მონაცემებს სერვერზე;
  • Modify – ცვლის ობიექტს PATCH მოთხოვნების დამუშავებით;
  • SendForProcessing – მეთოდი, რომელიც მიუთითებს POST მოთხოვნის გამოყენებაზე, როგორც ყველა წინა მეთოდში, უნდა შეიცავდეს მოთხოვნის ტექსტს და ასევე შეუძლია გადასცეს საპასუხო ფაილის მისამართი მონაცემების ჩასაწერად;
  • მიღება - ეს უფრო დეტალურად იქნება განხილული ქვემოთ;
  • GetHeadings არის კიდევ ერთი მეთოდი, რომელიც გამოყენებული იქნება სტატიაში;
  • Delete არის ფაქტობრივად Delite მოთხოვნა, რომელიც შლის სერვერიდან მოთხოვნაში გადაცემულ რესურსს.

მეორე სტრიქონში ვქმნით მოთხოვნას არჩეულ საიტზე, ჩვენი მოთხოვნის ტექსტი შეიცავს ერთ ხაზს, რაც ნიშნავს, რომ ჩვენ გვინდა მივიღოთ მთავარი გვერდი. თუ ხაზს მოჰყვებოდა რაიმე გამოთქმა, მაგალითად, „გვერდი2“ ან „ახალი ამბები“, ჩვენ სხვა გვერდს მივიღებდით.

მესამე ხაზი ასრულებს ჩვენს მოთხოვნას სერვერზე.

მეოთხეში ჩვენ ვაჩვენებთ შედეგს.

http-ის მოთხოვნის გადამისამართების მართვა

წარმოვიდგინოთ სიტუაცია, როდესაც პროგრამულად უნდა მივიღოთ ძიების შედეგი ნებისმიერის საშუალებით საძიებო სისტემაღილაკით „მოთხოვნები 1-ში“. კოდის განყოფილება, რომელიც საჭიროა GOOGLE-ზე წვდომისთვის, ნაჩვენებია ნახ. 3-ში

ნახ.3

აქ, ჩვენთვის უკვე ნაცნობი სტრუქტურების გარდა, არის Headers და Status Code. მოდით გავუმკლავდეთ მათ.

სტატუსის კოდი – „კომენტარების მოთხოვნაში“ მითითებულ სტანდარტულ მნიშვნელობას შეუძლია მიიღოს შემდეგი მნიშვნელობები:

  1. თუ ყველაფერი კარგადაა, მნიშვნელობა დაბრუნდება 100-დან 299-მდე დიაპაზონში;
  2. გადამისამართების შემთხვევაში დაბრუნდება კოდი 300-დან 399-მდე დიაპაზონში, რესურსზე წარმატებული მუდმივი გადამისამართება განისაზღვრება კოდით 301;
  3. თუ მოთხოვნაში არის შეცდომები, პარამეტრი მიიღებს მნიშვნელობას 400-დან 499-მდე;
  4. მნიშვნელობა 500-599 დიაპაზონში მიუთითებს სერვერთან არსებულ პრობლემებზე.

თითოეულ გვერდს აქვს სათაური, რომლის ტექსტში შეიძლება გამოიყოს რამდენიმე პარამეტრი (ნახ. 4):

  1. კავშირის დიაგრამა (ყველაფერი, რაც მოდის ორ ხაზამდე "//");
  2. მისამართების ზოლიკავშირები;
  3. მომხმარებლის სახელი და პაროლი;
  4. პორტი და ჰოსტი დასაკავშირებლად.

სწორედ ეს გაყოფა ხორციელდება SplitAddressLine ფუნქციით. ამგვარად ახალი მისამართის მიღების შემდეგ, ჩვენ შეგვიძლია შევინახოთ გვერდი ჩვენს კომპიუტერში და გავხსნათ ის ნაგულისხმევ ბრაუზერში (GetPage პროცედურა).

ნახ.5

აქ არ არის ახალი ფუნქციები ან მოთხოვნებთან მუშაობის გზები, ჩვენ რეალურად ვქმნით ტექსტური დოკუმენტისაიტის კორპუსიდან და გაუშვით გვერდი ბრაუზერში.

ჩვენ ვათავსებთ ფაილს D დისკის ძირში და ვუწოდებთ მას ტესტს.

ჩვენ ვიღებთ სურათს საიტიდან

ჩნდება ბუნებრივი კითხვა: თუ ჩვენ არ გვჭირდება მთელი საიტი, არამედ მხოლოდ მისი ცალკეული ელემენტების მოპოვება, შეიძლება თუ არა ამის გაკეთება და როგორ? Დიახ, შეგიძლია. პროგრამის კოდი, რომელიც გაძლევს ამის საშუალებას, წარმოდგენილია ნახაზ

სურ.6

როგორც ნახატიდან ხედავთ, მოთხოვნის მთავარ ნაწილში გვაქვს საიტის სტრუქტურის ელემენტის კოდი, რომელიც უნდა მივიღოთ. ეს ნაწილი ჩვენს წინა აღწერილობაში არ იყო და ამ საკითხზე უფრო დეტალურად უნდა ვისაუბროთ.

ჩვენ გამოვიყენეთ ბრაუზერიოპერა საიტზე შესვლისთვის. მას აქვს ერთი მნიშვნელოვანი ინსტრუმენტი ჩვენთვის, როდესაც თქვენ დააწკაპუნეთ ელემენტზე, შეგიძლიათ დარეკოთ კონტექსტური მენიუ, ერთ-ერთი ელემენტია „ელემენტის კოდის ნახვა“.

სწორედ მისი წყალობით შეგვიძლია მივიღოთ მისამართი, რომელიც გამოყენებული იქნება მოთხოვნაში ნახ. 7.

POST მოთხოვნა

მარტივი Get მოთხოვნებისგან განსხვავებით, POST http მოთხოვნებს აქვს ტექსტური ტექსტი, რომლის შენახვა შესაძლებელია როგორც მარტივი ტექსტის სახით, ასევე ფაილების სახით გაფართოებით xml, soap, json. ქსელში საკმაოდ ბევრი ინსტრუმენტია მოთხოვნის ტექსტების შესაქმნელად, რომლებიც საშუალებას გაძლევთ გამართოთ და აკონტროლოთ გარკვეული მოთხოვნების შესრულება.

1C-ში, კონკრეტული ტექსტით მოთხოვნის გასაშვებად, HTTP მოთხოვნის ობიექტს აქვს SetBodyFromString პროცედურა.

გააზიარეთ