2012-01-07 8 views
2

fsockopenを使用してこの生のHTTPコールに問題がありますか?fsockopenを使用してGETクエリーURLにPOSTする

POST /api/?action=report HTTP/1.1 
Host: www.webhosting-performance.com 
Content-Type: application/x-www-form-urlencoded 
Conent-Length: 9 
Connection: close 

test=test 

リモートスクリプトでは、var_dump($ _ POST)が空であると表示されます。

私のPHPコードのスニペットは次のようになります。

if (ini_get('allow_url_fopen') > 0) { 

    $parts = parse_url($url); 
    $fp = fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80, $errno, $errstr, 30); 

    if (!$fp) throw new Exception("Problem with $url, $errstr"); 

    $post_string = $post_fields ? http_build_query($post_fields) : ''; 

    $out = ($post_string ? "POST " : "GET ") . $parts['path'] . ((isset($parts['query'])) ? "?" . $parts['query'] : false) ." HTTP/1.1\r\n" 
     . "Host: ". $parts['host'] ."\r\n" 
     . ($post_string ? "Content-Type: application/x-www-form-urlencoded\r\n" : false) 
     . "Conent-Length: ". strlen($post_string) ."\r\n" 
     . "Connection: close\r\n" 
     . "\r\n" . $post_string; 

    fwrite($fp, $out); 

    // ... 

} else { 
    // use curl 
} 

答えて

2

あなたは基本的には誤植があります

Conent-Length: 9 

は(本当の問題があるContent-Length:

で行方不明tを参照してください。あなた自身で何かを作っているあなたの努力に悪影響を与えることはありません)、なぜcURLまたはPEARs HTTP Requestクラスを使用していませんか?

+0

長年の経験と、このようなちょっとしたタイプミス。私はこれを解決しようと何時間も座っていた。間違ってそのタイプミスをコピーし続けました。もう1時間それをしないように私を救ってくれてありがとう;)乾杯。 – tim

+0

あなたのもう一つの質問です。私は可能な限りネイティブでそれをやろうとしています。お客様のプラットフォームではサポートされていません。この関数は、allow_url_fopenが無効の場合にカールをサポートします。 PEARを追加することもできます。 – tim

関連する問題