How to properly send and receive XML using curl?
43,600
Does this help?
<?php
$url = "http://stackoverflow.com";
$xml = '<?xml version="1.0" encoding="UTF-8"?><Request PartnerID="asasdsadsa" Type="TrackSearch"> <TrackSearch> <Title>love</Title> <Tags> <MainGenre>Blues</MainGenre> </Tags> <Page Number="1" Size="20"/> </TrackSearch> </Request>';
$headers = array(
"Content-type: text/xml",
"Content-length: " . strlen($xml),
"Connection: close",
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$data = curl_exec($ch);
echo $data;
if(curl_errno($ch))
print curl_error($ch);
else
curl_close($ch);
?>
Author by
bukowski
Updated on July 05, 2022Comments
-
bukowski almost 2 years
I've been trying to post XML and get response from the server but with no luck.
Here are the conditions on server side:
- Requests to the server should be sent as XML over HTTP 1.1.
The following requirements apply to the HTTP request:
- The request type should be POST;
- A
Content-Length
header should be present, and the total length of the request should be below 16KB; - A
Content-Type
header should be present, containing the media type valuetext/xml
;
Here is my script:
$url = "http://somedomain.com"; $xml = '<?xml version="1.0" encoding="UTF-8"?> <Request PartnerID="asasdsadsa" Type="TrackSearch"> <TrackSearch> <Title>love</Title> <Tags> <MainGenre>Blues</MainGenre> </Tags> <Page Number="1" Size="20"/> </TrackSearch> </Request>'; $header = "POST HTTP/1.1 \r\n"; $header .= "Content-type: text/xml \r\n"; $header .= "Content-length: ".strlen($xml)." \r\n"; $header .= "Connection: close \r\n\r\n"; $header .= $xml; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header); $data = curl_exec($ch); echo $data; if(curl_errno($ch)) print curl_error($ch); else curl_close($ch);
This gives me:
HTTP Error 400. The request URL is invalid. Bad Request - Invalid URL