簡體   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