درخواست های دریافت از 1C دو برابر می شود. مدیریت تغییر مسیر درخواست http

هنگام توسعه روشی برای ارسال اطلاعات از 1C به سایت با نسخه پلت فرم 8.3.9.2170، با مشکلی مواجه شدم: توسعه دهنده سایت به من توانایی ضبط را داد. اطلاعات لازمفقط با کمک درخواست HTTPبا استفاده از روش PUT

بدون دوبار فکر کردن، یک کد ساده ترسیم کردم:

اتصال = HTTPConnection جدید ("www.mysite.ru"); سربرگ = مسابقه جدید. Headers["Content-Type"] = "application/x-www-form-urlencoded"; Request = New HTTPRequest("/api/order_items/93076?order_item=30", Headers); Connection.Write(Request);

بر اساس نتایج اجرا، مقدار کالای دریافتی در انبار باید در ردیف مربوط به سفارش خریدار در سایت درج شده باشد.

با این حال، همانطور که احتمالاً قبلاً فهمیده اید، هیچ اتفاقی نیفتاد. بعد از اینکه مطمئن شدم هیچ خطایی در سایت وجود ندارد (با ارسال درخواست مشابه از طریق افزونه کروم)، آن را در سایت خود راه اندازی کردم. کامپیوتر محلیوب سرور و شروع به آزمایش کرد.

یک چیز عجیب بلافاصله مشخص شد: کد بالا یک PUT ایجاد نمی کند، بلکه یک درخواست HEAD ایجاد می کند!

در لاگ های آپاچی موارد زیر را دیدم:

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

من کمی متعجب شدم (در نهایت، دفترچه راهنما به صورت سیاه و سفید نوشت)، اما گیج نشدم - می توانید مستقیماً این روش را فراخوانی کنید:

Connection.CallHTTPMmethod("PUT",Request);

لاگ ها همین را نشان می دهند:

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

"شاید من کار اشتباهی انجام می دهم؟" - از خودم سوال پرسیدم. اما هیچ نکته ای در اینترنت یا در دفترچه راهنما وجود نداشت. خوب، هنوز کسی روش پوک علمی را لغو نکرده است. برای شروع، من سعی کردم این کار را انجام دهم:

Connection.CallHTTPMmethod("fyvfyv",Request);

در گزارش هایی که دریافت کردم:

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

عجیب است که به این معنی است که 1C به طور خاص جایگزین روش PUT می شود (چرا 1C آن را دوست نداشت؟).

بعد از چند بار تلاش دیگر به این نتیجه رسیدم:

Connection.CallHTTPMmethod("PUT",Request);

در گزارش هایی که دریافت کردم:

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

و این گزینه قبلا در سایت کار کرده و همه راضی بودند.

او راه حل صحیح تری برای مشکل پیشنهاد کرد: باید بدن درخواستی را مشخص کنید، هر بدنه، حتی خالی. به عنوان مثال، این گزینه کار خواهد کرد:

اتصال = HTTPConnection جدید ("www.mysite.ru"); سربرگ = مسابقه جدید. Headers["Content-Type"] = "application/x-www-form-urlencoded"; Request = New HTTPRequest("/api/order_items/93076?order_item=30", Headers); Request.SetBodyFromString("",TextEncoding.UTF8, UseByteOrderMark.NotUse); Connection.Write(Request);

و احتمالاً ارسال مقادیر پارامترها در بدنه درخواست کاملاً صحیح است.

نتیجه به شرح زیر است: پلت فرم 1C درخواست PUT بدون بدنه را اشتباه می داند و روش را با HEAD جایگزین می کند.

جالب است که 1C درخواست POST را بدون بدنه ردیابی نمی کند و آن را به GET تبدیل نمی کند، من برای سرگرمی آن را بررسی کردم.

همانطور که وووچکا معروف از جوک معروف می گوید: "منطق کجاست؟"

امیدوارم انتشار من چند ساعت از زندگی شخصی را در جستجوی پاسخ نجات دهد. =)))

در پلتفرم 1C Enterprise 8.3 امکان ایجاد خدمات HTTP فراهم شد

با استفاده از زبان داخلی، اکنون می توانید به یک درخواست پاسخ دهید. در عین حال، دسترسی راحت به بدنه، هدر و خط منبع دارید درخواستو همچنین امکان تولید کد، بدنه و هدر وجود دارد پاسخبه صلاحدید خود

در مقایسه با وب سرویس های موجود در پلت فرم SOAP، سرویس های HTTP دارای چندین مزیت هستند:

  • سهولت برنامه نویسی مشتری چنین خدماتی؛
  • انتقال داده بالقوه کمتر؛
  • بار محاسباتی بالقوه کمتر؛
  • سرویس های HTTP «منابع» هستند، در حالی که سرویس های SOAP «عمل» هستند.

پایگاه داده اجرای خدمات http را نشان می دهد

http-service فهرست فاکتورها

سرویس http از الگوهای URL استفاده می کند و پردازش ویژگی را پیاده سازی می کند ParametersURLهدف - شی درخواست سرویس HTTPS
که در در این مثالنشان می دهد که چگونه می توانید یک فاصله بین پایه کاری و وب سایت شرکت ایجاد کنید
اتصال به پایگاه داده آزمایشی انجام شده است. مدیریت تجارت 11"، که در آن ابتدا برای دایرکتوری "Counterparties" باید یک ویژگی اضافی با نام تنظیم کنید رمز عبور وب ، جایی که رمز دسترسی را ذخیره می کنیم.
پارامترهای URL زیر به درخواست http ارسال می شود: TIN به عنوان ورود و رمز عبور.
هنگام پردازش یک درخواست، اتصال از طریق ComConnector به UT انجام می شود (ترمزها تضمین شده است) و نمونه برداری از آنجا انجام می شود.
من وانمود نمی کنم که این راه حل سریع یا بی خطر است، این فقط یک مثال است

بنابراین. یک شاخه جدید در درخت ابرداده - خدمات HTTP ظاهر شده است
ما ایجاد می کنیم سرویس جدید، نام و آدرس ریشه (لیست) آن را نشان دهید
URL ریشه برای تماس با سرویس http ما استفاده خواهد شد
در مرحله بعد، یک الگوی URL را به سرویس http اضافه کنید و "/(ورود)/(رمز عبور)" را به عنوان الگو مشخص کنید.
این الگو به شما امکان می دهد ساختار پارامترها و مقادیر آنها را در پارامترهای URL هنگام پردازش درخواست http دریافت کنید.
اکنون، به قالب URL خود، متدی به نام "get" اضافه می کنیم، GET را به عنوان روش http انتخاب کنید
هندلر را باز کنید و کد را بنویسید
کنترل کننده متد تابعی است که باید مقداری از نوع را برگرداند HTTPSserviceResponse

وضعیت سفارش سرویس http

این مثال پردازش متغیرهای منتقل شده با روش POST و تولید یک پاسخ را در قالب یک صفحه HTML پیاده سازی می کند.
این بار داده ها از پایگاه داده ای که hs در آن قرار دارد نمونه برداری می شود، بنابراین به طور قابل توجهی سریعتر از سرویس http قبلی کار می کند.
هنگام پیاده سازی یک سیستم کاری، ایجاد اشیاء در پایگاه داده (با یک سرویس) و پیکربندی انتقال داده ها از پایگاه داده منبع منطقی است (به عنوان مثال، جداسازی فرآیند پس زمینه). هنگام پردازش درخواست http، نمونه برداری مستقیماً از پایگاه داده ای که در آن قرار دارد انجام می شود.

انتشار

اطلاعات زیادی در مورد نصب و پیکربندی وب سرور وجود دارد.
من از بیلد httpd-2.2.25-win32-x86-openssl-0.9.8y.exe از اینجا استفاده کردم
با استفاده از روش "Next-Next-Finish" نصب شد :)
انتشار سرویس‌های http در همان مکانی است که انتشار سرویس‌های وب در آنجا بوده و هست و تفاوت خاصی ندارد.
پس از نصب وب سرور در حالت "Configurator"، به منوی "Administration" - "Publishing on a web server" بروید.
در برگه "خدمات HTTP" نام انتشارات، وب سرور، فهرست انتشارات را تنظیم می کنیم و خدمات خود را علامت گذاری می کنیم (در مورد من نام "web" است، وب سرور آپاچی 2.2)
هنگام انتشار، بلوک های مربوطه به طور خودکار در فایل پیکربندی httpd.conf نوشته می شوند و سرور مجدداً راه اندازی می شود (در اولین انتشار)
تماس با سرویس http
مثال: http://mysite/web/hs/list، جایی که
مکان من- آدرس سرور (اگر وب سرور به صورت محلی نصب شده باشد، می توانید از 127.0.0.1 استفاده کنید)
وب- نام مشخص شده در حین انتشار (نام مستعار)
hs- یک بخش مسیر اجباری که به سرور می گوید که کار با سرویس های http انجام می شود
فهرست– آدرس اصلی وب سرویس

آزمایش کردن

لیست فاکتورها

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 (از انتشارات)، راه اندازی یک اتصال com با پایگاه داده آزمایشی UT 11 و سند "سفارش" است.

آنچه برای راه اندازی و آزمایش نیاز دارید

  • وب سرور
  • هر مرورگر وب
  • نسخه فعلی1C: Enterprise 8.3

خوب، در اینجا نمونه ای از پردازش یک فایل XML با طرف های مقابل در سمت سرور آورده شده است:

کد VBS
require_once dirname(__FILE__). "/../inc/initf.php" ;
کلاس Onec_Import_Customers (
private static $instance ;
تابع __construct())(

Self::$instance = $this ;

فرآیند عملکرد عمومی() (
$rawHttp = file_get_contents ("php://input");
$xml_raw = str_replace("xml="، "", $rawHttp) ;

اگر ($_SESSION["loggedin"] || درست است)(
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 = stripslashes($_POST["xml"]);
$xml = stripslashes ($xml_raw);
if(!$xml) (
$xml = $xml_raw ;
//die ("بدون داده XML (کلید پست "xml")") ;
}
if ($this->setCustomers($xml)) (
مرگ ("OK");
) دیگر (
مرگ ("شکست")؛
}
) دیگر (
die();
}
}

تابع خصوصی setCustomers($xml)(
$db = db::getInstance() ;

$sxml = simplexml_load_string($xml) ;

$customers = $sxml->("Р"РѕРіРѕРІРѕСЂ) ? $sxml->("РІРѕРіРѕРІРѕСЂ") : self::err("فرمت فایل نامعتبر. مشتریان.") ;

$final = آرایه () ;
$k = 0 ;

$allCustomers = آرایه () ;

Foreach ($customers به ​​عنوان $cust) (
$password = base::generatePassword(6,1) ;

$arr ["password"] = $password ;

$arr ["email"] = (آرایه)$cust->("Почта") ;//? (آرایه)$cust->("Почта") : self::err("فرمت فایل نامعتبر. شماره مشتری:" . $k . ". ایمیل نامعتبر") ;
$arr ["email"] = $arr ["email"] ? $arr ["email"] : "";//: self::err("فرمت فایل نامعتبر. شماره مشتری:" . $k . ". ایمیل نامعتبر" ;

$arr ["app_name"] = (آرایه)$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 ["clientid"] ? $arr ["clientid"] : self::err("فرمت فایل نامعتبر. شماره مشتریان:" . $k . ". مشتری نامعتبر" ;

$arr ["date"] = (آرایه)$cust->("Дата) ? (آرایه)$cust->("Р"ата") : self::err("فرمت فایل نامعتبر. شماره مشتریان:" . $k." ". تاریخ نامعتبر" ;
$arr ["date"] = $arr ["date"] ? $arr ["date"] : self::err("فرمت فایل نامعتبر. شماره مشتریان:" . $k . ". تاریخ نامعتبر" ;

$arr ["date"] = explode(.","$arr ["date"]);
krsort($arr ["تاریخ"]);
$arr ["date"] = implode("-",$arr ["date"]). "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 ["District"] = (آرایه)$cust->("РайоРС") ;//? (آرایه)$cust->("айон") : self::err("فرمت فایل نامعتبر. شماره مشتریان:" . $k . ". ناحیه نامعتبر" ;
$arr ["District"] = $arr ["District"] ? $arr ["district"] : "";//self::err("فرمت فایل نامعتبر است. مشتریان شماره:" . $k . ". ناحیه نامعتبر" ;

$arr ["خیابان"] = (آرایه)$cust->("Улица") ;//؟ (آرایه)$cust->("Улица") : self::err("فرمت فایل نامعتبر. شماره مشتریان:" . $k . ". خیابان نامعتبر") ;
$arr ["street"] = $arr ["خیابان"] ? $arr ["خیابان"] : "";//self::err("فرمت فایل نامعتبر. شماره مشتریان:" . $k . ". خیابان نامعتبر" ;

$arr ["building"] = (آرایه)$cust->("Дом") ;//? (آرایه)$cust->("Р"РѕРј") : self::err("فرمت فایل نامعتبر. شماره مشتریان:" . $k . ". ساختمان نامعتبر") ;
$arr ["building"] = $arr ["ساختمان"] ? $arr ["building"] : "" ;//self::err("فرمت فایل نامعتبر است. مشتریان شماره:" . $k . ". ساختمان نامعتبر" ;

$arr ["apartament"] = (آرایه)$cust->("Квартира") ;//? (آرایه)$cust->("Квартира") : self::err("فرمت فایل نامعتبر. شماره مشتریان:" . $k . ". آپارتمان نامعتبر") ;
$arr ["apartment"] = $arr ["آپارتمان"] ? $arr ["آپارتمان"] : "";// self::err("فرمت فایل نامعتبر. شماره مشتریان:" . $k . ". آپارتمان نامعتبر" ;

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

$final = $arr ;
+$k ;
}

بازگشت $this->buildCustomers($final) ;
/*
if($this->buildCustomers($final)) (
foreach ($allCustomers as $clientid=>$data) (
self::sendPasswordToMail($data["email"], $clientid, $data["password"]) ;
}
}*/

تابع ثابت خصوصی 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("%password%"، $password، $email_text["content"]) ;
$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("site")) ;

عملکرد خصوصی buildCustomers ($data) (

$db = db::getInstance() ;

$qry = "I_insert INTO s1_customer ('active','password','app_name','email', 'date', 'clientid', 'phone_home', 'street', 'District', 'building', 'Apartment `) مقادیر " ;
foreach ($data بصورت $rows)(
$queryArr = "(
"0"
,MD5("($rows["password">")
"($db->escape($rows["app_name"]))"
"($db->escape($rows["email"]))"
"($db->escape($rows["date"]))"
"($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 (آپارتمان)
" ;
return $db->query($qry) ;
}

تابع استاتیک عمومی getInstance())(
if (!self::$instance)
{
new self();
}
بازگشت خود::$instance ;

تابع استاتیک خصوصی err($msg) (
پرتاب جدید ImportException($msg) ;
}

کلاس ImportException Exception را گسترش می دهد (

تابع __construct ($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 است که منبع ارسال شده در درخواست را از سرور حذف می کند.

در خط دوم ما یک درخواست به سایت انتخاب شده ایجاد می کنیم، متن درخواست ما دارای یک اسلش است، یعنی می خواهیم دریافت کنیم. صفحه نخست. اگر بعد از اسلش هر عبارتی به‌عنوان مثال «page2» یا «news» استفاده شود، صفحه دیگری دریافت می‌کنیم.

خط سوم درخواست ما را به سرور اجرا می کند.

در چهارمین نتیجه را نشان می دهیم.

مدیریت تغییر مسیر درخواست http

بیایید شرایطی را تصور کنیم که در آن باید به صورت برنامه‌ریزی یک نتیجه جستجو را از طریق هر کدام به دست آوریم موتور جستجوبا کلید "درخواست‌ها در 1s". بخش کد مورد نیاز برای دسترسی به GOOGLE در شکل 3 نشان داده شده است

شکل 3

در اینجا، علاوه بر ساختارهایی که قبلا برای ما آشنا هستند، سرصفحه ها و کد وضعیت وجود دارد. بیایید با آنها مقابله کنیم.

کد وضعیت - مقدار استاندارد مشخص شده در "درخواست نظرات"، می تواند مقادیر زیر را داشته باشد:

  1. اگر همه چیز خوب باشد، مقدار در محدوده 100 تا 299 باز می گردد.
  2. در صورت تغییر مسیر، کدی در محدوده 300 تا 399 در مورد ما بازگردانده می شود، یک تغییر مسیر دائمی موفقیت آمیز به یک منبع با کد 301 تعیین می شود.
  3. اگر در درخواست خطا وجود داشته باشد، پارامتر از 400 تا 499 مقدار می گیرد.
  4. مقداری در محدوده 500-599 نشان دهنده مشکلات سرور است.

هر صفحه دارای عنوانی است که در متن آن چندین پارامتر قابل تشخیص است (شکل 4):

  1. نمودار اتصال (هر چیزی که قبل از دو اسلش "//" می آید).
  2. نوار آدرساتصالات؛
  3. نام کاربری و رمز عبور؛
  4. پورت و میزبان برای اتصال.

این تقسیم است که توسط تابع SplitAddressLine انجام می شود. پس از دریافت یک آدرس جدید، می توانیم صفحه را در رایانه خود ذخیره کرده و آن را در مرورگر پیش فرض باز کنیم (روش GetPage).

شکل 5

هیچ توابع یا روش جدیدی برای کار با درخواست ها در اینجا وجود ندارد، ما در واقع در حال ایجاد هستیم سند متنیاز بدنه سایت و راه اندازی صفحه در مرورگر.

فایل را در ریشه درایو D قرار می دهیم و آن را تست می نامیم.

تصویر را از سایت می گیریم

یک سوال طبیعی مطرح می شود: اگر ما به کل سایت نیاز نداشته باشیم، بلکه فقط باید عناصر فردی آن را بدست آوریم، آیا می توان این کار را انجام داد و چگونه؟ بله، تو میتونی. کد برنامه ای که به شما اجازه انجام این کار را می دهد در شکل 6 ارائه شده است

شکل 6

همانطور که در شکل مشاهده می کنید، در بدنه درخواست، کد عنصر ساختار سایت را داریم که باید دریافت کنیم. این قسمت در توضیحات قبلی ما نبود و لازم است بیشتر روی این نکته بمانیم.

ما از مرورگر استفاده کردیم Opera برای دسترسی به سایت. این یک ابزار مهم برای ما دارد، وقتی روی یک عنصر راست کلیک می کنید، می توانید تماس بگیرید منوی زمینهیکی از آیتم ها "مشاهده کد عنصر" است.

به لطف او است که ما می توانیم آدرسی را که در درخواست استفاده می شود در شکل 7 بدست آوریم.

درخواست POST

برخلاف درخواست‌های ساده Get، درخواست‌های POST http دارای بدنه متنی هستند که می‌توانند به صورت متن ساده یا به صورت فایل‌هایی با پسوند xml، soap، json ذخیره شوند. ابزارهای بسیار زیادی در شبکه برای ایجاد متون درخواستی وجود دارد که به شما امکان اشکال زدایی و نظارت بر اجرای درخواست های خاص را می دهد.

در 1C، برای راه اندازی یک درخواست با یک متن خاص، شی درخواست HTTP دارای رویه SetBodyFromString است.

اشتراک گذاری