PHP 套接字和 Whatsapp 代理
PHP Sockets and Whatsapp Proxy
我正在构建一个关于 WhatsApp 的小项目,并且我正在使用 https://github.com/mgp25/Chat-API,即使存储库不再支持。
我的问题是套接字,我正在使用它们登录。我的代码中失败的部分是:
<?php
$socket = fsockopen("e" . rand(1, 16) . ".whatsapp.net:" . Constants::PORT);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(
'sec' => Constants::TIMEOUT_SEC,
'usec' => Constants::TIMEOUT_USEC
));
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array(
'sec' => Constants::TIMEOUT_SEC,
'usec' => Constants::TIMEOUT_USEC
));
?>
我收到以下错误:
C:\MAMP\htdocs\WhatsappTestApp\whatsapp\src\whatsprot.class.php on line 305
[10-May-2017 15:11:13 Africa/Johannesburg] PHP Warning: socket_set_option(): supplied resource is not a valid Socket resource in C:\MAMP\htdocs\WhatsappTestApp\whatsapp\src\whatsprot.class.php on line 291
[10-May-2017 15:11:13 Africa/Johannesburg] PHP Warning: socket_set_option(): supplied resource is not a valid Socket resource in C:\MAMP\htdocs\WhatsappTestApp\whatsapp\src\whatsprot.class.php on line 296
[10-May-2017 15:11:13 Africa/Johannesburg] PHP Warning: socket_read(): supplied resource is not a valid Socket resource in C:\MAMP\htdocs\WhatsappTestApp\whatsapp\src\whatsprot.class.php on line 299
[10-May-2017 15:11:13 Africa/Johannesburg] PHP Fatal error: Uncaught FailedProxy: [0]: Failed proxy. Error 3
thrown in C:\MAMP\htdocs\WhatsappTestApp\whatsapp\src\whatsprot.class.php on line 301
在您的代码中,您将文件与套接字混合在一起,因此 PHP 会引发错误。要解决此问题,您可以使用 socket_create
创建套接字,或使用 stream_set_timeout
设置超时并使用文件系统函数读取/写入套接字:
<?php
$protocol = "tcp"; /* or "ssl" for HTTPS */
$host = "e" . rand(1, 16) . ".whatsapp.net";
$fp = fsockopen("$protocol://$host", Constants::PORT, $errn, $errm);
stream_set_timeout($fp, Constants::TIMEOUT_SEC);
/* You can treat $fp the same way you would treat a file */
//$data = fread($fp, 8192);
//fwrite($fp, "my data");
//fclose($fp);
?>
如果您想使用套接字,那么 $socket
应该是一个套接字资源:
<?php
$host = "e" . rand(1, 16) . ".whatsapp.net";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $host, Constants::PORT);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(
'sec' => Constants::TIMEOUT_SEC,
'usec' => Constants::TIMEOUT_USEC
));
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array(
'sec' => Constants::TIMEOUT_SEC,
'usec' => Constants::TIMEOUT_USEC
));
?>
我正在构建一个关于 WhatsApp 的小项目,并且我正在使用 https://github.com/mgp25/Chat-API,即使存储库不再支持。
我的问题是套接字,我正在使用它们登录。我的代码中失败的部分是:
<?php
$socket = fsockopen("e" . rand(1, 16) . ".whatsapp.net:" . Constants::PORT);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(
'sec' => Constants::TIMEOUT_SEC,
'usec' => Constants::TIMEOUT_USEC
));
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array(
'sec' => Constants::TIMEOUT_SEC,
'usec' => Constants::TIMEOUT_USEC
));
?>
我收到以下错误:
C:\MAMP\htdocs\WhatsappTestApp\whatsapp\src\whatsprot.class.php on line 305
[10-May-2017 15:11:13 Africa/Johannesburg] PHP Warning: socket_set_option(): supplied resource is not a valid Socket resource in C:\MAMP\htdocs\WhatsappTestApp\whatsapp\src\whatsprot.class.php on line 291
[10-May-2017 15:11:13 Africa/Johannesburg] PHP Warning: socket_set_option(): supplied resource is not a valid Socket resource in C:\MAMP\htdocs\WhatsappTestApp\whatsapp\src\whatsprot.class.php on line 296
[10-May-2017 15:11:13 Africa/Johannesburg] PHP Warning: socket_read(): supplied resource is not a valid Socket resource in C:\MAMP\htdocs\WhatsappTestApp\whatsapp\src\whatsprot.class.php on line 299
[10-May-2017 15:11:13 Africa/Johannesburg] PHP Fatal error: Uncaught FailedProxy: [0]: Failed proxy. Error 3
thrown in C:\MAMP\htdocs\WhatsappTestApp\whatsapp\src\whatsprot.class.php on line 301
在您的代码中,您将文件与套接字混合在一起,因此 PHP 会引发错误。要解决此问题,您可以使用 socket_create
创建套接字,或使用 stream_set_timeout
设置超时并使用文件系统函数读取/写入套接字:
<?php
$protocol = "tcp"; /* or "ssl" for HTTPS */
$host = "e" . rand(1, 16) . ".whatsapp.net";
$fp = fsockopen("$protocol://$host", Constants::PORT, $errn, $errm);
stream_set_timeout($fp, Constants::TIMEOUT_SEC);
/* You can treat $fp the same way you would treat a file */
//$data = fread($fp, 8192);
//fwrite($fp, "my data");
//fclose($fp);
?>
如果您想使用套接字,那么 $socket
应该是一个套接字资源:
<?php
$host = "e" . rand(1, 16) . ".whatsapp.net";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $host, Constants::PORT);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array(
'sec' => Constants::TIMEOUT_SEC,
'usec' => Constants::TIMEOUT_USEC
));
socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array(
'sec' => Constants::TIMEOUT_SEC,
'usec' => Constants::TIMEOUT_USEC
));
?>