0

こんにちは皆さん、すでに尋ねられている場合は、仮想銃で私を撃たないことを願っていますが、ここに行きます.

私は ip/port に socket_send しています。サーバーがデータを受信して​​応答していることがわかります。私のコードは xxxx バイトを受け取ります。これらのバイトが IE: xml 文字列に何を伴うのかを知りたいので、アプリケーションでデータを解析して使用することができます。サーバーはヘッダーを受信して​​もまったく応答しないため、この状況では cURL は実行できません。

**Code:**
/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}

/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}

echo "Attempting to connect to '$address' on port '$port'...";
$result = socket_connect($socket, $address, $port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK.\n";
}

$in = $xml;
$out = '';

echo "Sending HTTP HEAD request...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
socket_shutdown($socket, 1);
echo "Reading response:\n\n";
$buf = '';
if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
echo "Read $bytes bytes from socket_recv(). Closing socket...";
} else {
echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . "\n";
}
socket_close($socket);

echo $buf . "\n";
echo "OK.\n\n";
?>

応答:

TCP/IP 接続は正常です。わかった。ポート「9000」で「xxx.xxx.xxx.xxx」に接続しようとしています...OK。HTTP HEAD リクエストを送信しています...OK。読み取り応答: socket_recv() から 1365 バイトを読み取ります。ソケットを閉じています... OK。

4

2 に答える 2

0

まず、ヘッダーを送信せずに cURL を使用できます。参考までに。

第二に、それがどのタイプのコンテンツであるかを正確に判断するのは難しいでしょう.サーバーは何らかの種類の「コンテンツタイプ」を返しますか? もしそうなら、あなたはそれを読むことができるかもしれません。

その後、$buf を使用してから、XML ライブラリを使用して文字列を解析することを試みることができます (PHP の SimpleXML ライブラリなど)。

たとえば、XML を解析しない場合は、それが通常の文字列であるか、それ以外であることがわかります。

ただし、cURL はコンテンツ タイプを返す必要があります。

于 2013-06-04T20:48:46.913 に答える
0

クレイジーな頭痛といくつかの薬のヒットの後、私は問題を見つけました: 1 行 OMG

ソケットでこの問題が発生した場合は、socket_close($socket)追加した後の行にecho html_entity_decode($buf).

于 2013-06-05T23:24:21.960 に答える