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
}
長年の経験と、このようなちょっとしたタイプミス。私はこれを解決しようと何時間も座っていた。間違ってそのタイプミスをコピーし続けました。もう1時間それをしないように私を救ってくれてありがとう;)乾杯。 – tim
あなたのもう一つの質問です。私は可能な限りネイティブでそれをやろうとしています。お客様のプラットフォームではサポートされていません。この関数は、allow_url_fopenが無効の場合にカールをサポートします。 PEARを追加することもできます。 – tim