2011-07-01 11 views
0

私はPHPを使用してクライアントマシンから私たちの内部サイトにデータをポストする際に問題があります。サーバーは基本認証でHTTPS経由でデータを受け入れます。HTTP POST要求レスポンス(バグ?)

次のヘッダーで
$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 https://bugs.php.net/bug.php?id=45540のバージョン5.2.6に列挙されていることを発見しました。

おかげで、 のJak

答えて

2

あなたはすべてのそれらのヘッダーを提供してはなりません。それは失敗することになります。

POST、Host、Content-Length、Connectionなどのヘッダーが自動的に提供されます。任意のヘッダーをすべて削除して(作業するはずです)、それらを段階的に追加します。

+0

ありがとう、ありがとう。私はそれらの部分を削除し、それは動作します。奇妙なことに、それは他のクライアントマシンですべてのヘッダーを使用していました。 – Jak

関連する問題