2013-10-28 171 views
16

我有一個簡單的Web服務,我想連接。爲了發佈一些XML,這將在Web服務端正確進行,我需要準備一個適當的請求。我使用cURL這樣的:PHP cURL內容類型未設置

try { 
    $ch = curl_init(); 

    if (FALSE === $ch) 
     throw new Exception('failed to initialize'); 

    curl_setopt($ch, CURLOPT_URL,"192.168.1.37"); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
              'Content-Type: application/xml', 
              'Connection: Keep-Alive' 
              )); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password); 
    curl_setopt($ch, CURLOPT_PROXY, ''); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); 
    curl_setopt($ch, CURLOPT_HTTPHEADER,array("Expect: ")); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$xml); 


    $request= curl_getinfo($ch); 
    var_dump($request); 


    $content = curl_exec($ch); 


    if (FALSE === $content) 
     throw new Exception(curl_error($ch), curl_errno($ch)); 



} catch(Exception $e) { 

    trigger_error(sprintf(
     'Curl failed with error #%d: %s', 
     $e->getCode(), $e->getMessage()),E_USER_ERROR); 

} 

一切都應該沒問題。首先,我從curl_getinfo($ch);顯示請求正文,然後顯示來自$content變量的響應。

的請求唯一的限制將被髮送到服務器Content-Type頭 - 它必須是application/xml否則服務器將響應錯誤(這不是我的主意,我不能做任何事情)

這裏輸出要求:

array(21) { ["url"]=> string(68) "192.168.1.37" ["content_type"]=> NULL ["http_code"]=> int(0) ["header_size"]=> int(0) ["request_size"]=> int(0) ["filetime"]=> int(0) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(0) ["namelookup_time"]=> float(0) ["connect_time"]=> float(0) ["pretransfer_time"]=> float(0) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(-1) ["starttransfer_time"]=> float(0) ["redirect_time"]=> float(0) ["certinfo"]=> array(0) { } }

和應對HTTP 400 Bad Request

我可以從爲看但我在我的PHP代碼中設置了這個變量...

任何人都可以告訴我我失蹤了嗎?

+0

嘗試查看此帖子: [http://stackoverflow.com/questions/9823810/set-http-request-content-type](http://stackoverflow.com/questions/9823810/set-http-請求內容類型) –

回答

39

要設置HTTP_HEADER兩次:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
              'Content-Type: application/xml', 
              'Connection: Keep-Alive' 
              )); 

curl_setopt($ch, CURLOPT_HTTPHEADER,array("Expect: ")); 

我想這就是問題所在。第二次設置時,刪除第一個設置。

+2

當然是它!不能相信這是如此愚蠢的錯誤。謝謝Legionar! – Mithrand1r

+1

呃複製粘貼代碼的問題。我有完全相同的問題,導致完全相同的問題。 Upvoted – khuderm