【问题标题】:Socks5 multiple requestsSocks5 多个请求
【发布时间】:2015-02-18 17:00:53
【问题描述】:

我正在使用连接到代理并通过它发送数据的 socks5 php 库。该库在我向 http 服务器发出单个请求时工作,但是当我在接收空字符串中执行第二个请求时,在第三个时我收到一个错误

10053 已建立的连接被您的软件中止 主机。

我不明白为什么会这样,我查看了有关 socks5 服务器的 RFC 和维基百科,我认为所有连接都是正确的。但仍然没有得到第二个回应。

库代码是一个文件,我从这里得到它Socks5Socket

我的代码是下一个

set_time_limit(100);
error_reporting ( E_ALL );

require_once "Socks5Socket.php";

$s = new \Socks5Socket\Client();
$s->configureProxy(array(
    'hostname' => '162.144.56.44',
    'port' => 60088
));
$s->connect('en.wikipedia.org', 80);
$request = "GET /wiki/HTTP_persistent_connection HTTP/1.1\r\n".
           "Host: en.wikipedia.org\r\nConnection: Keep-Alive\r\n\r\n";
$s->send($request);
$response = $s->readAll();

//At this point all OK



$request2 = "GET /wiki/No-till_farming HTTP/1.1\r\n".
           "Host: en.wikipedia.org\r\nConnection: Keep-Alive\r\n\r\n";

$s->send($request2);
// Empty string here, no error
$response2 = $s->readAll();


$s->send($request2);
// Errno 10053
$response3 = $s->readAll();
file_put_contents("response.txt",$response2);
$response = substr($response,strpos($response,"»")+1);
//echo $response;
echo "<br><br>".substr($response,strpos($response,"\r\n\r\n")+1);

【问题讨论】:

  • 您是否验证了目标 HTTP 服务器正在遵守保持活动状态?第一个响应中 Connection 标头的值是多少?如果服务器在发送第一个响应后关闭连接,则代理将关闭与您的客户端的连接,因此您必须在发送第二个请求之前再次重新连接到代理。
  • 顺便说一句,使用 readAll() 不是读取 HTTP 响应的正确方法。您需要实际读取 HTTP 标头并解析它们以了解如何读取其余响应数据。这意味着适当地使用readLine() 和read(),而不是使用readAll()。您必须遵循 HTTP 处理规则以确保连接的完整性,尤其是如果您想使用 HTTP 保持活动。
  • @RemyLebeau 你是对的,http 服务器正在关闭我的连接。我已经尝试过使用 smtp 服务器,一切正常。
  • HTTP 不保证持久连接。在最坏的情况下,您必须准备好在每个请求上重新连接。 HTTP 1.1 将持久性作为默认设置,但不是必需的。

标签: php proxy connection socks


【解决方案1】:

好的,问题是 http 服务器在我做任何其他事情之前就关闭了我的连接。我已经尝试使用 SMTP 服务器并且连接不再关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2021-12-29
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多