ローカルサーバlocalhost
からデータを読み込むためにPHPを使用しようとしていますが、データが返されていないようです。ここに私の完全な脚本があります。ここでlocalhost(カスタムポート)は、POSTリクエスト後に空のデータを返します
<?php
$address = "localhost";
echo "Attempting to open the socket at ".$address."...\n";
$fp = fsockopen($address, 49801, $errno, $errstr, 10);
echo "Error number is "; echo $errno; echo ".\n";
echo "Error string is ".$errstr.".\n";
echo "Attempt complete.\n";
if ($fp) {
print "Socket in now open.\n";
syslog(LOG_INFO, "socket.php: Reaching the specified address...");
print "Writing requests...\n"; //Hangs for about 1-2 minutes
fwrite($fp, "POST/HTTP/1.0\r\nUser-Agent: PHP XMLRPC 1.0\r\nHost: ".$address."Content-Type: text/xml\r\nContent-Length: ".strlen($payload)."\r\n\r\n");
$msg = "";
while($data = fread($fp, 32768)) {
$msg= $msg.$data;
}
if (strlen($msg) != 0) {
print "Final message: ***".$msg."***\n";
} else {
print "There is no data received from '".$address."'\n";
}
fclose($fp);
} else {
print "Error\n";
}
?>
私は、端末に取得しています出力されます:
Attempting to open the socket at localhost...
Error number is 0.
Error string is .
Attempt complete.
Socket in now open.
Writing requests...
There is no data received from 'localhost'
上記のスクリプトで述べたように、第2の最後の行は約1または2分間Writing requests...
ハングは、空の文字列がされ添付。
このスクリプトはHTTPのポート80またはSSHのポート22でうまく動作するので、私はそれが好奇心だと思う。localhost:49801
のアクセスを制限しているため、サーバーの設定を変更できない。
しかし、私は別の日のために私の髪を裂く必要がないように何かがサーバーの設定に間違っていたのだろうかと思っていた。
ところで、私はCentOSの7上にPHP 5.4を実行しています
編集
「111」、「コンテンツの長さ:111は、」ペイロードの文字列の長さに依存して任意の数です。
ありがとうございました!
なぜだけではなく、標準のHTTPメソッドを使用します。以下は
は私がfwriteの使用して、データの9刺さを送るのContent-Lengthその後、と9への変更の例を働いていますCソケットAPIで作業する代わりに? – miken32
また、HTTPサーバーに111バイトの本体があると予想し、それから送信しないように指示しています。 – miken32
ええと、私はあなたが "C socket API"の意味を理解しているかどうかわかりません。また、111がペイロードに応じて変わる任意の数であることを忘れています。投稿を更新します。 –