繁体   English   中英

php curl获取代理

[英]php curl get proxy

我在Windows中使用PHP脚本来发出成功发出SOAP请求的curl请求,并且我正在尝试准确地跟踪这个成功请求如何在C#.NET中复制它。

如何使用PHP来检测将使用哪个代理服务器curl

我希望在php curl中可能有一个curl_getopt ,所以我可以这样做:

curl_getopt(CURLOPT_PROXY);

但唉它不存在。

有什么方法让我找出哪个代理服务器php curl将连接通过?

你告诉curl使用什么代理,而不是viaversa:

function wget($url)
{
    $options = array(
        CURLOPT_URL             => $url,
        CURLOPT_HEADER          => false,
        CURLOPT_FOLLOWLOCATION  => true,
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_TIMEOUT         => 30,
        CURLOPT_PROXY           => '...proxy.ip...',
        CURLOPT_PROXYPORT       => '...proxy.port...',
        CURLOPT_USERAGENT       => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9',
    );
    $ch = curl_init();
    curl_setopt_array($ch, $options);
    $content = curl_exec($ch);
    $error = curl_error($ch);
    return (!$error && $content) ? $content : null;
}

2.另一种解决方案>

看看这个答案> 如何获得以前用curl_setopt()设置的选项?

3.覆盖curl_setopt()函数

http://php.net/manual/en/function.override-function.php

ps你应该需要http://php.net/manual/en/function.rename-function.php

4.使用runkit覆盖函数

http://php.net/manual/en/book.runkit.php

如果它使用与Windows配置相同的,你应该能够像这样找到它(未经测试,因为我没有Windows服务器):

<?php
    $proxyServerString = shell_exec('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | find /i "proxyserver"');
    $proxyServerString = trim($proxyServerString);
    /*
        $proxyServerString should be 'ProxyServer    REG_SZ    http=127.0.0.1:8888;https=127.0.0.1:8888'
    */
    preg_match("/ProxyServer *REG_SZ *(.*)/i", $proxyServerString, $match);
    /*
        $match[1] will be something like 'http=127.0.0.1:8888;https=127.0.0.1:8888'
    */
    $proxyServersTemp = explode(";", $match[1]);
    $proxyServers = array();
    foreach ($proxyServersTemp as $proxyServerTemp) {
        preg_match("/^(.*?)=(.*?):(.*?)$/", $proxyServerTemp, $proxyMatch);
        $proxyServers[] = array(
            "protocol" => $proxyMatch[1],
            "address" => $proxyMatch[2],
            "port" => $proxyMatch[3]
        );
    }
    print_r($proxyServers);
?>

$proxyServers现在应该包含以下内容:

Array
(
    [0] => Array
        (
            [protocol] => http
            [address] => 127.0.0.1
            [port] => 8888
        )

    [1] => Array
        (
            [protocol] => https
            [address] => 127.0.0.1
            [port] => 8888
        )

)

一种方法是,您可以向www.whatismyip.com或类似网站发出卷曲请求,并检查html响应以找出您正在使用的代理(如果您正在使用)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM