将表单数据发布到外部URL + curl

时间:2009-12-08 22:20:06

标签: php curl service

我有这个表单,我试图用来将数据发布到外部网址。我确实有一些非常基本的使用php curl的知识。到目前为止,如果我使用我编写的代码:

<?php
    if ($_POST['request_callback'])
    {
      $customer_name = cleaninput($_REQUEST['customer_name'],"text");
      $debtor_id = cleaninput($_REQUEST['debtor_id'],"number");
      $telephone_number = cleaninput($_REQUEST['customer_number'],"number");

      if ($_POST['callme_now'] == '1') {
         $callback_time = date('y-m-d ' . $_POST['hour_select'] . ':' . $_POST['minute_select'] . ':s');
      } else {
         $callback_time = date('y-m-d H:i:s');
      }

      // Send using CURL 
      $ch = curl_init(); 
      curl_setopt( $ch, CURLOPT_URL, "http://www.myjoomla.eo/test.php"); // URL to post 
      curl_setopt ($ch, CURLOPT_POST, 1);
      curl_setopt ($ch, CURLOPT_POSTFIELDS,         "Name=$customer_name&Debtor_ID=$debtor_id&Telephone_Number=$telephone_number&CallBack_Time=$callback_time");
      curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
      $result = curl_exec( $ch ); // runs the post 
      curl_close($ch);
      echo "Reply Response: " . $result; // echo reply response
     }
?>

到目前为止,它会发布到文件并显示结果。现在,如何格式化已发布为xml格式的数据?理想情况下,我试图实现像这样的xml,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<CallRequest>
<ProjectName>Test</ProjectName>
<ContactNumberToDial>07843088348</ContactNumberToDial>
<DateTimeToDial></DateTimeToDial>
<ListSource>WebLead</ListSource>
<AgentName></AgentName>
<AddToList>False</AddToList>
<SpecificAgent>False</SpecificAgent>
<DBField>
    <FieldName>Name</FieldName>
    <FieldValue>Testing</FieldValue>
</DBField>
</CallRequest>

任何人都知道该怎么做?

谢谢,

詹姆斯

3 个答案:

答案 0 :(得分:1)

我过去使用的XML库允许您使用PHP创建XML XmlWriter。该库最初编写为与PHP4一起使用。您会发现它的名称与内置PHP5类的名称冲突,因此您需要将类声明和构造函数更改为其他内容。

希望有所帮助!

答案 1 :(得分:0)

我同意jkndrkn - 似乎cURL是正确的,这是test.php输出的问题。 IBM有一篇很棒的文章,关于用PHP check it out here读取/编写/解析XML。

答案 2 :(得分:0)

嗨抱歉花了一些时间回来。一直试图以一些方式解决这个问题。我被告知的是客户端想要将xml字符串发布到给定的URL。在查看示例页面时,他们有3个可能的示例。 SOAP 1.1有一个示例,它显示请求和响应,SOAP 1.2请求和响应的示例,HTTP GET请求和响应示例以及HTTP POST请求和响应示例。

我选择了后者,我觉得这是最容易使用的,我使用的是PHP curl。

HTTP POST示例如下:

请求:

POST /ClickToCall/CallRequest.asmx/Call HTTP/1.1
Host: 194.217.1.2
Content-Type: application/x-www-form-urlencoded
Content-Length: length

xmlString=string

响应:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">string</string>

当我在网址的测试页面上输入xmlString手册时,我得到了必要的回复。

xmlString如下所示:

<?xml version="1.0" encoding="utf-8"?><CallRequest><ProjectName>Noble Test</ProjectName><ContactNumberToDial>07843088348</ContactNumberToDial><DateTimeToDial>2009-12-10 18:30:53</DateTimeToDial><ListSource>WebLead</ListSource><AgentName></AgentName><AddToList>False</AddToList><SpecificAgent>False</SpecificAgent><DBField><FieldName>Name</FieldName><FieldValue>NobleTesting</FieldValue></DBField></CallRequest>

但是当我使用我的代码时,我根本没有回复。

这是我正在使用的代码:

<?php

if ($_POST['request_callback'])
{
$customer_name = cleaninput($_REQUEST['customer_name'],"text");
$debtor_id = cleaninput($_REQUEST['debtor_id'],"number");
$telephone_number = cleaninput($_REQUEST['customer_number'],"number");

if ($_POST['callme_now'] == '1') {
    $callback_time = date('y-m-d ' . $_POST['hour_select'] . ':' .    $_POST['minute_select'] . ':s');
} else {
    $callback_time = date('y-m-d H:i:s');
}

// XML data as string 
$request = '<?xml version="1.0" encoding="utf-8"?>'; 
$request .= '<CallRequest>'; 
$request .= '<ProjectName>Nobel Test</ProjectName>'; 
$request .= '<ContactNumberToDial>' . $telephone_number . '</ContactNumberToDial>'; 
if (isset($_POST['callme_now'])) {
$request .= '<DateTimeToDial></DateTimeToDial>';
} else {
$request .= '<DateTimeToDial>' . date('Y-m-d ' . $_POST['hour_select'] . ':' .     $_POST['minute_select'] . ':s') . '</DateTimeToDial>';
}
$request .= '<ListSource>WebLead</ListSource>'; 
$request .= '<AgentName></AgentName>'; 
$request .= '<AddToList>False</AddToList>'; 
$request .= '<SpecificAgent>False</SpecificAgent>'; 
$request .= '<DBField>';
$request .= '<FieldName>Customer Name</FieldName>';
$request .= '<FieldValue>' . $customer_name . '</FieldValue>';
$request .= '</DBField>';
$request .= '</CallRequest>';

// Create Headers 
$header[] = "Host: www.myjoomla.eo"; 
$header[] = "Content-type: application/x-www-form-urlencoded"; 
$header[] = "Content-length: ". strlen($request) . "\r\n"; 

$header[] = $request;

$loginUsername = "username";
$loginPassword = "password"; 

// Send using CURL 
$ch = curl_init(); 
curl_setopt( $ch, CURLOPT_URL, "http://194.217.1.2/ClickToCall/CallRequest.asmx/Call"); // URL to post 

curl_setopt($ ch,CURLOPT_USERPWD,“$ loginUsername:$ loginPassword”); //登录    curl_setopt($ ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);

curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1); //返回变量    curl_setopt($ ch,CURLOPT_POST,1);    curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,0);    curl_setopt($ ch,CURLOPT_SSL_VERIFYHOST,0);

curl_setopt($ ch,CURLOPT_POSTFIELDS,$ header);

$ result = curl_exec($ ch); //运行帖子    curl_close($ CH);

echo“回复回复:”。 $结果; //回复回复响应    echo“

”;    echo“

";
   print_r($header);
   echo "
”;

//返回$ result;    }

有没有人看到上述代码?感谢