2012-01-23 101 views
0

我正在嘗試使用curl與第三方服務器進行通信。服務器始終以curl響應200,但在瀏覽器中訪問時會給出錯誤消息

認證體系如下:

  1. 使用憑證索要餅乾
  2. 設置cookie的
  3. 提出請求

這本身並不是一個問題,我能夠發出請求等,但無論我發送服務器總是響應200即使我發送無效的數據格式。如果我在瀏覽器中放置相同的URL,它將返回有關無效格式的錯誤消息。

有誰知道這可能是爲什麼?在此先感謝,

function go($url,$postvars=null) 
{ 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_VERBOSE, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookie_.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookie_.txt');  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 

      curl_setopt($ch, CURLOPT_POST, 1); 
      curl_setopt($ch,CURLOPT_POST,count($postvars)); 
      $postfields = http_build_query($postvars); 
      curl_setopt($ch, CURLOPT_POSTFIELDS,$postfields);  
    curl_exec($ch); 
    curl_close($ch); 
} 

go($url,$login_array); //login=>'',pass=>'' 
go($url,$some_request_array); 

回答

1

一個非常可能的可能性是服務器代碼中的錯誤,這意味着它將發送200個狀態及其錯誤消息。因此,在瀏覽器中它將是一個錯誤信息,因爲這就是身體內部的東西,它仍然是「成功」的。在瀏覽器訪問中加入攔截(螢火蟲網絡,小提琴手等)並查看狀態。

如果是這種情況下,你已經兩個選項:

  1. 獲取方負責服務器進行修復。
  2. 解析錯誤消息,然後將其視爲錯誤條件。
+0

嗨,喬恩。非常感謝。那就是問題所在。但是,爲什麼curl不會顯示200錯誤信息? – rix

+0

打敗我,我猜想它可能是,但是否會看到它,將不僅取決於您對響應做了什麼,而且可能會從HTTP(我所知道的)進一步移動到捲曲的工作方式(我不知道)。 –

相關問題