【问题标题】:PHP libcurl socks5 not workingPHP libcurl socks5 不工作
【发布时间】:2018-10-19 17:07:51
【问题描述】:

我尝试使用 libcurl 连接到 socks5 代理,但是我收到了答案 SOCKS: authentication failed。我还尝试通过带有 cURL 的 Powershell 脚本连接到代理服务器——它可以工作,因此代理服务器可用并且我的登录名和密码正确。我尝试了很多解决方案...但是通过 PHP 脚本连接仍然无法正常工作。

PHP 版本 – 5.4,cURL 版本 – 7.19。我能做什么?

[更新]这是我当前的代码。我想用我的 Telegram 机器人发送消息 :)

    $proxy = '<hostname>:<port>';
    $proxy_auth = '<username>:<password>';

    $url = 'https://api.telegram.org/bot<botID>/sendMessage?'.'chat_id='.$chat_id.'&parse_mode='.$parse_mode.'&text='.'test';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_auth);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, true);
    $curl_scraped_page = curl_exec($ch);
    $error = curl_error($ch);
    echo $error;
    echo $curl_scraped_page;
    curl_close($ch);

【问题讨论】:

  • 也许您的 curl 配置不信任 https 连接?试试curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)
  • 尝试添加:curl_setopt($ch, CURLOPT_PROXY, $proxy);curl_setopt($ch, CURLOPT_PROXYUSERPWD, $password);
  • 我会升级到 curl 7.21.7 或更高版本,然后你可以直接使用更新的curl_setopt($ch, CURLOPT_PROXY, 'socks5://bob:marley@localhost:12345'); 选项
  • 如果你想使用你的查询结果,我想你应该添加这个:curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($this-&gt;curlInstance, CURLOPT_RETURNTRANSFER, TRUE);
  • @MrHeelis 试图缩小范围,哈哈

标签: php libcurl telegram-bot socks


【解决方案1】:

这是其他有相同问题的人的完整答案。

//Curl setup
$url = "https://google.com";
$proxy = "10.23.2.2:8080";
$password = "username:secret_passowrd";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_HEADER, true);

//proxy's address
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//proxy's password
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $password);

//in order to follow redirects.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//in order to use the result of the query
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//run query
$curl_scraped_page = curl_exec($ch);
$error = curl_error($ch);
echo $error;
echo $curl_scraped_page;
curl_close($ch);

希望对您有所帮助。

【讨论】:

  • 不幸的是,这段代码也不起作用(SOCKS : authentication failed)......我不明白为什么。 Сan代理服务器名称是问题的原因吗?它看起来像ex.example.com
  • $password 应该是 username:passowrd
  • 是的,我知道并且做到了
  • 不幸的是:(
  • 我有相同的代码,它正在工作,你使用的那个 API 怎么样,你也不需要身份验证,我的意思是 API_KEY 或类似的东西。
猜你喜欢
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多