• 1 رای - 4 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ارسال درخواست با curl به وب سرویس معمولی
#1
با سلام من می خواستم بدونم چه زوری می تونم به وب سرویس مقدار ارسال کنم هر کاری می کنم این ارور رو میده در فایل curl.php که برای تست نوشتم
کد:
SOAP-ENV:ClientOperation '' is not defined in the WSDL for this service

کد های server.php
کد پی‌اچ‌پی:
<?php
require_once("lib/nusoap.php") ; //library
$server = new nusoap_server();
$server->configureWSDL("myservice","urn:service1") ; // configure  WSDL


function getmassage($message)
{
return 
"Welcome " $message;
}


$server->register(
                
"getmassage"
                
,array("name"=>"xsd:string")//inputs
                
,array("result"=>"xsd:string")//outputs
);


//http listener
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)? $HTTP_RAW_POST_DATA '';//for Error
$server->service($HTTP_RAW_POST_DATA); 

?>


کد های فایل client.php

کد پی‌اچ‌پی:
<?php 
require_once("lib/nusoap.php"); //library
$param=array("name"=>"amir");
$client = new nusoap_client("http://localhost/WebService/server.php?wsdl",true);
$response $client->call("getmassage",$param);
echo 
$response;
?>


کد های فایل curl.php

کد پی‌اچ‌پی:
<?php
/*
$url = "http://localhost/WebService/server.php?wsdl";
$param=array("name"=>"amir");

 
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
curl_exec($ch);*/


// initialise the curl request
$request curl_init('http://localhost/WebService/server.php?wsdl');

// send a file
curl_setopt($requestCURLOPT_POSTtrue);
curl_setopt(
    
$request,
    
CURLOPT_POSTFIELDS,
    array(
      
'name' => 'mamali' 
    
));

// output the response
curl_setopt($requestCURLOPT_RETURNTRANSFERtrue);
echo 
curl_exec($request);

// close the session
curl_close($request);

?>

لطفا یک کمکی کنید به من ؟؟
هر 3تا فایل هم رو لوکال هاستم هستند
  پاسخ
تشکر شده توسط :
#2
لطفا یک نفر یه استادی یک یاری برسونه ؟؟؟
help me !!!1
  پاسخ
تشکر شده توسط :
#3
سلام ، وقتی داری از soap استفاده میکنی نیازی به curl دیگه نیست.

اولین کدت که تو فایل server.php هست رو ذخیره کن و بعدش هم یه فایل client.php رو به این صورت تغییر بده.

کد پی‌اچ‌پی:
<?php

$client 
= new soapClient("http://localhost/server.php?wsdl");
$a $client->getmassage("mojtaba");
echo 
$a
و بعدش هم فایل client.php رو اجرا کن، همین!! این یه مثال خیلی ساده اس.
  پاسخ
تشکر شده توسط : game100
#4
با سلام دوست عزیز ممنونم از این که پاسخ دادید ولی من منطورم این بود که به فرض اینکه فایل server.php روی یک سروری دیگر است و با استفاده ار curl از سایت دیگر به وب سرویس مورد نظر در گفتم درخواست ارسال کنم و نتیجه رو دیافت کنم بعنوان مثال

از سایت www.ali.com به www.mohamad.com که وب سرویس ای روش قرار داره درخواست رو ارسال کنم و نتیجه رو دریافت کنم
امید وارم با این توضیحات بتونم به جواب نهایی برسمم پیشاپیش هم از همهی افرادی که یاری میدن ممنونم .
  پاسخ
تشکر شده توسط :
#5
لطفاً کمک کنید اساتید محترم
  پاسخ
تشکر شده توسط :
#6
[عکس: proxyRole.gif]
دوست عزیز وب سرویس برای همین کار طراحی شده. تا شما از طریق اینترنت بتونید در کلاینت( http://www.ali.com) درخواست رو به سرور( http://www.mohamad.com) ارسال کنید، سرور کارهای لازم رو انجام میده و نتیجه رو به کلاینت ارسال میکنه. کاری که در سیستم های ارسال پیامک و درگاه پرداخت اینترنتی انجام میشه.

این لینک رو مطالعه کنید.
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط :
#7
من بازم به جوابم نرسیدم من می خوام از curl به این وب سرویس درخواست ارسال کنم می خوام بدونم اصلان میشه همیچن چیزی؟؟؟
  پاسخ
تشکر شده توسط :
#8
ساختار وب سرویس رو اگر مطالعه کنید، متوجه خواهید شد که تمام استاندارد ها و پروتکل های وب سرویس( WSDL ،SOAP و ... ) بر مبنای XML هستند. پس باید با زبان xml با سرور وب سرویس صحبت کنید نه ارسال پارامتر بصورت مستقیم( GET و POST).
راه حل ها:
1. اعمال کردن curl به کلاینت وب سرویس

2. اعمال کردن curl به سرور وب سرویس با کمی تغییرات در پارامترهای ارسالی( تبدیل به xml). نمونه کد:
کد پی‌اچ‌پی:
$url "http://localhost/WebService/server.php?wsdl";
$action //SOAP action;
$parameter '</xml version="1.0" encoding="utf-8" ?><soap:Envelope>'
    
//parameters
    
'</soap:Envelope>';
$header = array("Content-Type: text/xml; charset=utf-8",
        
"SOAPAction: ".$action,
        
"Content-length: ".strlen($parameter)
        );
$request curl_init();
curl_setopt($requestCURLOPT_URL,            $url );
curl_setopt($requestCURLOPT_CONNECTTIMEOUT10);
curl_setopt($requestCURLOPT_TIMEOUT,        10);
curl_setopt($requestCURLOPT_RETURNTRANSFERtrue );
curl_setopt($requestCURLOPT_SSL_VERIFYPEERfalse);
curl_setopt($requestCURLOPT_SSL_VERIFYHOSTfalse);
curl_setopt($requestCURLOPT_POST,           true );            
curl_setopt($requestCURLOPT_POSTFIELDS,     $parameter); 
curl_setopt($requestCURLOPT_VERBOSETRUE); 
curl_setopt($requestCURLOPT_HTTPHEADER$header); 

$result curl_exec($request);
if( 
$result===false ){
    die(
'error: '.curl_error($request));
}else{
    
$xmlobj simplexml_load_string($result);
    
var_dump($xmlobj);
}
curl_close($request); 
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط :
#9
آیا وب سرویسی وجود داره که بصورت get نوشته شده باشه و با curl بهش درخواست ارسال بشه و اصلان از un soap استفاده نکرده باشه ؟؟
  پاسخ
تشکر شده توسط :
#10
Dodgy
به یـزدان که گر ما خرد داشتیم
کجـا این سر انجـام بد داشتیم؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان