2014-12-01 31 views
1

嘗試將以下XML數據發送到下面的URL。在PHP中發送XML到URL(不包含曲線)

$xml="<?xml version='1.0' encoding='utf-8'?> 
<Job> 
    <Name>Set-up - ".$client_name."</Name> 
    <Description></Description> 
    <ClientID>".$accountantid."</ClientID> 
    <StartDate>".$start_date."</StartDate>  
    <DueDate>".$due_date."</DueDate> 
    <TemplateID>".$templateid."</TemplateIDr> 

</Job>"; 

$createjob_url="https:<url>apiKey=[apikey]&accountKey=[accountkey]"; 

$stream_options = array (
     'http' => array (
       'method' => "POST", 
       'header' => "Content-type: application/x-www-form-urlencoded\r\n", 
       'content' => $xml 
     ) 
); 
$context=stream_context_create($stream_options); 
$response=file_get_contents($createjob_url, false, $context); 

echo "<p>".$response."</p>"; 

答案應該出來'確定',但它只是空白。

debug.log有以下錯誤。

PHP Warning: file_get_contents(https:<url>?apiKey=[apikey]&accountKey=[accountkey]): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error 

我注意到URL改變 '&' 到 '&'。如果我把url直接放到瀏覽器中,它不起作用,但是如果我刪除'amp''它給了我肯定的迴應。

但是,如果我從代碼中刪除'false,$ context'例如file_get_contents($createjob_url),響應返回'OK',所以URL很好。

我使用的是Google App Engine,因此無法使用cURL。

我認爲它與我的流選項有關嗎?任何反饋將不勝感激。

回答

2

所以看起來像我的問題是一些小事情。

對於我分析到,我沒有需要有XML標籤的特定URL,所以去除<?xml version='1.0' encoding='utf-8'?>

他們還希望內容類型爲XML,所以把它改爲'header' => "Content-type: text/xml"

一旦我這兩個排序,一切運作良好:)