統合 · 中級

Go および PHP のプロキシ: net/http Transport、x/net/proxy、cURL、および Guzzle

Go および PHP で HTTP または SOCKS プロキシを明示的に構成し、資格情報をログに記録しないようにし、タイムアウトを設定します。この例では、http.Transport、cURL、Guzzle について説明します。ゲートウェイ設定は、クライアントがどの出口を受け取るかを制御します。

2 分で読めます 6セクション 確認日 編集チーム Proxy Cyber

移動: http.Transport#

行く
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://USER-cc-us:PASS@res.proxy-cyber.com:9000")
	client := &http.Client{
		Timeout: 45 * time.Second,
		Transport: &http.Transport{
			Proxy:             http.ProxyURL(proxyURL),
			DisableKeepAlives: true, // new connection = new exit on the rotating gateway
		},
	}
	resp, err := client.Get("https://api.ipify.org")
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}

接続の再利用と IP 割り当ては異なる制御です。クライアントセッションはソケットを再利用します。割り当てられたゲートウェイのみがローテーションとスティッキーセッションの動作を決定します。サービスで提供されるセッション パラメーターを使用し、複数のリクエストにわたる終了を確認します。ソケットを閉じるか、Connection: close を送信しても、異なる IP が保証されるわけではありません。

Go: リクエストごとにプロキシを選択する#

行く
tr := &http.Transport{
	Proxy: func(r *http.Request) (*url.URL, error) {
		sid := r.Header.Get("X-Session") // your own hint, never sent to the proxy
		r.Header.Del("X-Session")
		return url.Parse(fmt.Sprintf("http://USER-cc-de-sid-%s-ttl-10m:PASS@res.proxy-cyber.com:9000", sid))
	},
}

行く:SOCKS5#

行く
import "golang.org/x/net/proxy"

dialer, err := proxy.SOCKS5("tcp", "res.proxy-cyber.com:9001", &proxy.Auth{User: "USER-cc-us", Password: "PASS"}, proxy.Direct)
if err != nil { panic(err) }
tr := &http.Transport{Dial: dialer.Dial}
client := &http.Client{Transport: tr, Timeout: 45 * time.Second}

PHP: cURL#

PHP
<?php
$ch = curl_init("https://api.ipify.org");
curl_setopt_array($ch, [
    CURLOPT_PROXY          => "http://res.proxy-cyber.com:9000",
    CURLOPT_PROXYUSERPWD   => "USER-cc-us:PASS",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 15,
    CURLOPT_TIMEOUT        => 45,
    CURLOPT_FORBID_REUSE   => true, // new exit per call on the rotating gateway
]);
echo curl_exec($ch);

// SOCKS5 with remote DNS
curl_setopt($ch, CURLOPT_PROXY, "res.proxy-cyber.com:9001");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

PHP: ガズル#

PHP
<?php
use GuzzleHttp\Client;

$sticky = "http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000";
$client = new Client(['proxy' => $sticky, 'timeout' => 45, 'connect_timeout' => 15]);

$r = $client->get('https://api.ipify.org');
echo $r->getBody();

チェックリスト#

  • 割り当てられたゲートウェイがサポートする独立したワークフローごとに、個別のセッション ID を使用します。接続の詳細で、許可されている期間と場所のパラメーターを確認してください。住宅用デバイスは、要求された期間が経過する前に切断される可能性があります。スティッキー セッションは、何日間も同じ IP を保証するものではありません。固定アドレスの場合はスタティック専用品と比較してください。
  • タイムアウトは終了タイプに応じて調整されます。転送エラーの場合は 1 回の再試行。
  • プロキシ URL は決してログに記録しないでください。パスワードが含まれています。代わりにセッション ID を記録します。

人々が尋ねる質問#

Go の http.ProxyFromEnvironment は機能しますか?

はい: HTTPS_PROXY と HTTP_PROXY をキー プロキシ URL とともにエクスポートし、トランスポートのプロキシ関数として http.ProxyFromEnvironment を使用します。 NO_PROXY はローカル ホストを除外します。

あなたのアカウント

1 つのアカウントでプロキシを管理

1 つのダッシュボードからネットワークを比較し、注文し、残高とサポート リクエストを追跡します。私たちのチームが支払いを確認し、配達後に接続の詳細を提供します。

アカウント作成