2011-07-01 122 views
0

我有一些麻煩從客戶機發布數據到我們的內部網站使用PHP。服務器通過基本身份驗證通過HTTPS接受數據。下面是我使用了POST代碼:PHP POST與自定義標題給HTTP 400錯誤請求響應(錯誤?)

$parameters = array('http' => array(
     'method' => 'POST', 
     'content' => $data 
     ) 
); 
if ($optionalHeaders !== NULL) { 
    $parameters['http']['header'] = $optionalHeaders; 
} 

$ctx = stream_context_create($parameters); 
$fp = fopen($url, 'rb', false, $ctx); 

用下面的標題:

$postHeader = "POST /index.php HTTP/1.1\r\n". 
    "Host:my.host\r\n". 
    "Content-Type: application/x-www-form-urlencoded\r\n". 
    "User-Agent: PHP-Code\r\n". 
    "Content-Length: " . strlen($postData) . "\r\n". 
    "Authorization: Basic ".base64_encode($user.':'.$password)."\r\n". 
    "Connection: close\r\n"; 

現在,我能得到這個工作,而且它的帖子就好了我的一個客戶用PHP 5.2.5版,但其他客戶端上我得到這個錯誤信息:

fopen(magical_url): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request 

與Apache的錯誤日誌中給出了:

request failed: error reading the headers 

我可以看到的唯一區別是後一個客戶端有PHP版本5.1.6。 有誰知道這是否是一個錯誤?或者我在某處做錯了什麼... 我瀏覽過PHP網站,發現PHP 5.236版本中列出的此錯誤爲https://bugs.php.net/bug.php?id=45540,但是這個日期是它的工作版本!

感謝, 的Jak

回答

2

你不應該提供所有這些頭。這肯定會失敗。

自動提供POST,Host,Content-Length和Connection等標題。刪除所有可選的標題(應該工作),並逐步添加它們。

+0

非常好,謝謝。我刪除了這些部分,它的工作原理。奇怪的是,它在所有標題的其他客戶端機器上工作。 – Jak