我需要在下面的JSON表单中发布一个REST调用。注意,有效负载变量是XML。我使用的是带有CURL的PHP 5。找出我做错了什么。谢谢
{
"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"
}构造了以下代码,但我没有得到响应,也看不到被调用的应用程序上有任何操作。
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';发布于 2016-02-08 16:31:11
您正在初始化CURLOPT_HTTPHEADER选项两次。而你只需要用所有的头初始化它一次。
错误:
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.正确:
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept: application/json') );https://stackoverflow.com/questions/35260247
复制相似问题