首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JSON POST中的XML嵌入PHP-CURL

将JSON POST中的XML嵌入PHP-CURL
EN

Stack Overflow用户
提问于 2016-02-08 07:01:15
回答 1查看 386关注 0票数 0

我需要在下面的JSON表单中发布一个REST调用。注意,有效负载变量是XML。我使用的是带有CURL的PHP 5。找出我做错了什么。谢谢

代码语言:javascript
复制
{
    "processDefId":"testing~SimpleApplication!1.0~SimpleProcess",
    "serviceName":"SimpleProcess.service",
    "operation":"start",
    "payload":"<payload><formArg><p0:WebForm1 xmlns:p0=\"http://www.frevvo.com/schemas/_N5J6IBUOEeWgf4K8GSSanA\"/></formArg></payload>", 
    "action":"Submit"
}

构造了以下代码,但我没有得到响应,也看不到被调用的应用程序上有任何操作。

代码语言:javascript
复制
try {
    echo '<br>Curl Start<br>';
    echo file_put_contents($log, "Start \n", FILE_APPEND);

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL,"http://192.168.56.151:7003/bpm/api/3.0/processes");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_FAILONERROR);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json') );
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/json') );
    curl_setopt($curl, CURLOPT_USERPWD, "jstein:welcome1");

    $xml  = '<ns1:start xmlns:ns1=\http://xmlns.oracle.com/bpm/webform/formsData/requestTravelAccount\">';
    $xml .=  '<formArg    xmlns:ns2=\"http://www.frevvo.com/schemas/_1g73gMt3EeWsKsy3N_19_Q\">';
    $xml .=    '<ns2:RequestTravelAccount>';
    $xml .=       '<EmployeeId>1771</EmployeeId>';
    $xml .=       '<FirstName>Aaron</FirstName>';
    $xml .=       '<LastName>Thompson</LastName>';
    $xml .=       '<PersonId>300000087953021</PersonId>';
    $xml .=    '</ns2:RequestTravelAccount>';
    $xml .=  '</formArg>';
    $xml .= '</ns1:start>';
    $xml_e = htmlspecialchars($xml, ENT_QUOTES);
    echo file_put_contents($log, $xml_e ."\n", FILE_APPEND);

    $post_data = array(    
        "processDefId"=>"testing~HCM!1.0~NewEmployeeTravelSetupProcess",
        "serviceName"=>"NewEmployeeTravelSetupProcess.service",
        "operation"=>"start",
        "action"=>"Submit",
        "payload" => $xml_e 
    );
    $curl_post_data = json_encode($post_data);
    echo file_put_contents($log, "$curl_post_data"."\n", FILE_APPEND);

    curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);

    $curl_response = curl_exec($curl);
    echo '<br> CURL_EXEC return: ' . curl_error($curl);
} catch (Exception $e) {

    echo 'Caught exception" ',$e->getMessage(), "\n";
}
curl_close($curl);

echo '<br>CURL done';
EN

回答 1

Stack Overflow用户

发布于 2016-02-08 16:31:11

您正在初始化CURLOPT_HTTPHEADER选项两次。而你只需要用所有的头初始化它一次。

错误:

代码语言:javascript
复制
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json') );
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/json') );  // resetting above one for this line.

正确:

代码语言:javascript
复制
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept: application/json') );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35260247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档