طلب الصابون fsockopen
سؤال
أحاول إرسال رسالة صابون إلى خدمة باستخدام PHP.
أريد أن أفعل ذلك مع fsockopen ، إليك الكود:
<?php
$ fp =fsockopen ("ssl: //xmlpropp.worldspan.com" ، 443 ، $ errno ، $ errstr) ؛
if (! is_resource ($ fp)) {die ('fsockopen faited for number'. $ errno. '.'. $ errstr) ؛ }
$ soap_out = "post /xmlts http /1.1 r n" ؛ $ soap_out. = "المضيف: 212.127.18.11:8800RN" ؛ // $ soap_out. = "user-ogent: mysoapisokguys r n" ؛ $ soap_out. = "نوع المحتوى: text/xml ؛ charset = 'utf-8' r n" ؛ $ soap_out. = "محتوى طول: 999 r n r n" ؛ $ soap_put. = "الاتصال: أغلق r n" ؛ $ soap_out. = "soapaction: r n" ؛ $ soap_out. = 'WorldSpan هذا اختبار' ؛
if(!fputs($fp, $soap_out, strlen($soap_out)))
echo "could not write";
echo "<xmp>".$soap_out."</xmp>";
echo "--------------------<br>";
while (!feof($fp))
{
$soap_in .= fgets($fp, 100);
}
echo "<xmp>$soap_in</xmp>";
fclose($fp);
echo "ok";
الرمز أعلاه معلق فقط. إذا قمت بإزالة ما هو على ما يرام ، لذلك أفترض أن المشكلة عند $ soap_in. = fgets ($ fp ، 100)
أي أفكار لما يحدث
المحلول
ليس مجرد مسألة فتح مقبس ثم كتابة "Post ...." - أنت بحاجة إلى مكدس HTTP كامل لتحليل الاستجابات المحتملة (على سبيل المثال ما هي المحتوى الجزئي؟). استخدم حليقة.
السبب في فشله حاليًا هو أن النظام البعيد تم تكوينه لاستخدام Keepalives - والذي سيتم حله مرة أخرى باستخدام مكدس HTTP المناسب.
جيم
نصائح أخرى
أوصي ، استخدم حليقة لإجراءات الصابون. http://www.zimbra.com/forums/developers/9890-solved-simple-saap-admin-example-php.html#post52586