我需要将XML和图像一起提交给一个安静的Web服务。这是可以使用curl吗?
在web中可用的各种示例中,我可以看到它们将多部分和其他表单数据一起传递。但是,我找不到一个将XML和图像一起发送的示例。
这是我正在尝试的代码。
<?php
$url = "http://www.myservice.com/event";
$file = dirname(__FILE__) . "\image.jpg";
$boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10);
$event_xml_data =
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' .
'<ns5:event ' .
'xmlns="http://www.myservice.com/Common/"' .
'xmlns:ns2="http://www.myservice.com/Event/"' .
'xmlns:ns3="http://www.myservice.com/Media/"' .
'xmlns:ns4="http://www.myservice.com/Media/" ' .
'xmlns:ns5="http://www.myservice.com/Event/"> ' .
'<id>0</id>' .
'<name>Event2004</name> '.
'<ns2:description>Description845</ns2:description>' .
'<ns2:startDate>2012-02-27T22:21:29.458-06:00</ns2:startDate>' .
'<ns2:owner>Madhu</ns2:owner>' .
'</ns5:event>';
$content_type_header = 'Content-Type: multipart/form-data; '
.'type="application/xml"; '
.'boundary="' . $boundary . '"; '
.'start="<event>"; '
.'start-info="application/xml";';
$accept_header = 'Accept: multipart/form-data';
$transfer_encoding_header = 'Transfer-Encoding: chunked';
$fileContents = file_get_contents($file);
$headers = array($content_type_header, $accept_header, $transfer_encoding_header);
$postData = $boundary . "\r\n"
."Content-Type: application/xml\r\n\r\n"
."Content-Transfer-Encoding: binary\r\n\r\n"
."Content-ID: <event>\r\n\r\n"
.$event_xml_data . "\r\n"
.$boundary . "\r\n"
."Content-Type: image/jpeg\r\n"
."Content-Transfer-Encoding: binary\r\n\r\n"
. $fileContents . "\r\n"
.$boundary . "--\r\n";
$postDataNoMedia = $boundary . "\r\n"
."Content-Type: application/xml\r\n\r\n"
."Content-Transfer-Encoding: binary\r\n\r\n"
."Content-ID: <event>\r\n\r\n"
.$event_xml_data . "\r\n"
.$boundary . "--\r\n";
$f = fopen('request.txt', 'w');
//open connection
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, 'madhukampurath:xxxxxx');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postDataNoMedia);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1);
curl_setopt($ch, CURLOPT_VERBOSE ,1);
curl_setopt($ch, CURLOPT_STDERR , $f);
//execute post
$output = curl_exec($ch);
$error = curl_error($ch);
$http_code = curl_getinfo($ch ,CURLINFO_HTTP_CODE);
fclose($f);
echo $http_code . "<br />";
echo $output;
echo $error;
curl_close($ch);
?>
<?php
$url = "http://www.myservice.com/event";
$file = dirname(__FILE__) . "\image.jpg";
$boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10);
$event_xml_data =
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' .
'<ns5:event ' .
'xmlns="http://www.myservice.com/Common/"' .
'xmlns:ns2="http://www.myservice.com/Event/"' .
'xmlns:ns3="http://www.myservice.com/Media/"' .
'xmlns:ns4="http://www.myservice.com/Media/" ' .
'xmlns:ns5="http://www.myservice.com/Event/"> ' .
'<id>0</id>' .
'<name>Event2004</name> '.
'<ns2:description>Description845</ns2:description>' .
'<ns2:startDate>2012-02-27T22:21:29.458-06:00</ns2:startDate>' .
'<ns2:owner>Madhu</ns2:owner>' .
'</ns5:event>';
$content_type_header = 'Content-Type: multipart/form-data; '
.'type="application/xml"; '
.'boundary="' . $boundary . '"; '
.'start="<event>"; '
.'start-info="application/xml";';
$accept_header = 'Accept: multipart/form-data';
$transfer_encoding_header = 'Transfer-Encoding: chunked';
$fileContents = file_get_contents($file);
$headers = array($content_type_header, $accept_header, $transfer_encoding_header);
$postData = $boundary . "\r\n"
."Content-Type: application/xml\r\n\r\n"
."Content-Transfer-Encoding: binary\r\n\r\n"
."Content-ID: <event>\r\n\r\n"
.$event_xml_data . "\r\n"
.$boundary . "\r\n"
."Content-Type: image/jpeg\r\n"
."Content-Transfer-Encoding: binary\r\n\r\n"
. $fileContents . "\r\n"
.$boundary . "--\r\n";
$postDataNoMedia = $boundary . "\r\n"
."Content-Type: application/xml\r\n\r\n"
."Content-Transfer-Encoding: binary\r\n\r\n"
."Content-ID: <event>\r\n\r\n"
.$event_xml_data . "\r\n"
.$boundary . "--\r\n";
$f = fopen('request.txt', 'w');
//open connection
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, 'madhukampurath:xxxxxx');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postDataNoMedia);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1);
curl_setopt($ch, CURLOPT_VERBOSE ,1);
curl_setopt($ch, CURLOPT_STDERR , $f);
//execute post
$output = curl_exec($ch);
$error = curl_error($ch);
$http_code = curl_getinfo($ch ,CURLINFO_HTTP_CODE);
fclose($f);
echo $http_code . "<br />";
echo $output;
echo $error;
curl_close($ch);
?>
Web服务在java中完成。 Tomcat日志会出现此错误。
org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse WARNING: WebApplicationException has been caught : Couldn't find MIME boundary: -----------------------8a09e81751