php - 使用 curl 来使用这个 Web 服务

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7337221/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 02:30:40  来源:igfitidea点击:

php - using curl to consume this web service

phpweb-servicescurlasmx

提问by mheavers

I saw this post on consuming a web service using CURL: Consume WebService with php

我看到了这篇关于使用 CURL 使用 Web 服务的帖子:Consume WebService with php

and I was trying to follow it, but haven't had luck. I uploaded a photo of the web service I'm trying to access. How would I formulate my request given the example below, assuming the URL was:

我试图遵循它,但没有运气。我上传了我尝试访问的网络服务的照片。假设 URL 为:

https://site.com/Spark/SparkService.asmx?op=InsertConsumer

https://site.com/Spark/SparkService.asmx?op=InsertConsumer

enter image description here

在此处输入图片说明

I attempted this, but it just returns a blank page:

我尝试了这个,但它只返回一个空白页:

 $url = 'https://xxx.com/Spark/SparkService.asmx?op=InsertConsumer?NameFirst=Joe&NameLast=Schmoe&PostalCode=55555&[email protected]&SurveyQuestionId=76&SurveyQuestionResponseId=1139';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    curl_close($ch);

    $xmlobj = simplexml_load_string($result);
    print_r($xmlobj);

回答by DaveRandom

Really, you should probably look at the SOAP extension. If it is not available or for some reason you must use cURL, here is a basic framework:

确实,您可能应该查看SOAP 扩展。如果它不可用或由于某种原因您必须使用 cURL,这里是一个基本框架:

<?php

  // The URL to POST to
  $url = "http://www.mysoapservice.com/";

  // The value for the SOAPAction: header
  $action = "My.Soap.Action";

  // Get the SOAP data into a string, I am using HEREDOC syntax
  // but how you do this is irrelevant, the point is just get the
  // body of the request into a string
  $mySOAP = <<<EOD
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope>
  <!-- SOAP goes here, irrelevant so wont bother writing it out -->
</soap:Envelope>
EOD;

  // The HTTP headers for the request (based on image above)
  $headers = array(
    'Content-Type: text/xml; charset=utf-8',
    'Content-Length: '.strlen($mySOAP),
    'SOAPAction: '.$action
  );

  // Build the cURL session
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, TRUE);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $mySOAP);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

  // Send the request and check the response
  if (($result = curl_exec($ch)) === FALSE) {
    die('cURL error: '.curl_error($ch)."<br />\n");
  } else {
    echo "Success!<br />\n";
  }
  curl_close($ch);

  // Handle the response from a successful request
  $xmlobj = simplexml_load_string($result);
  var_dump($xmlobj);

?>

回答by Marc B

The service requires you to do a POST, and you're doing a GET (curl's default for HTTP urls) instead. Add this:

该服务要求您执行 POST,而您正在执行 GET(curl 对 HTTP url 的默认设置)。添加这个:

curl_setopt($ch, CURLOPT_POST);

and add some error handling:

并添加一些错误处理:

$result = curl_exec($ch);
if ($result === false) {
    die(curl_error($ch));
}

回答by Pratik Mehta

This is the best answer because using this once you need to login then get some data from webservices(third party site data).

这是最好的答案,因为一旦您需要登录就使用它,然后从网络服务(第三方站点数据)获取一些数据。

$tmp_fname = tempnam("/tmp", "COOKIE"); //create temporary cookie file

$post = array(
    '[email protected]',
    'password=123456' 
); 

$post = implode('&', $post); 

//login with username and password
$curl_handle = curl_init ("http://www.example.com/login");

//create cookie session 
curl_setopt ($curl_handle, CURLOPT_COOKIEJAR, $tmp_fname);  

curl_setopt ($curl_handle, CURLOPT_RETURNTRANSFER, true); 

curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $post); 

$output = curl_exec ($curl_handle);

//Get events data after login 
$curl_handle = curl_init ("http://www.example.com/events");  

curl_setopt ($curl_handle, CURLOPT_COOKIEFILE, $tmp_fname); 

curl_setopt ($curl_handle, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec ($curl_handle);

//Convert json format to array
$data = json_decode($output); 

echo "Output : <br> <pre>";

   print_r($data);

echo "</pre>";