私は本当にこれで立ち往生しており、専門家の助けが必要です. 私が達成しようとしていることとセットアップについて説明しましょう。Zend_Http_Client を使用して https フォームに投稿するスクリプトがありました。サーバーのセットアップでは、tor と privoxy を実行しています。すべてが正常に機能しましたが、同じサーバーで tor と privoxy の複数のインスタンスを実行して、コードをよりスケーラブルにする必要があります。
したがって、Adapter for Zend をZend_Http_Client_Adapter_CurlからZend_Http_Client_Adapter_Proxyに変更しました。しかし、アダプターを変更した後、奇妙なエラーが発生しました - 400 無効なヘッダーがクライアントから受信され、Zend クライアントのオブジェクトをダンプすると、次のように表示されます -
MyWebClientResponse::__set_state(array(
'json' => NULL,
'version' => '1.1',
'code' => 400,
'message' => 'Invalid header received from client',
'headers' =>
array (
'Proxy-agent' => 'Privoxy 3.0.19',
'Content-type' => 'text/plain',
'Connection' => 'close',
),
'body' => 'Invalid header received from client.
',
))
何が間違っているのかわかりません。コードは Yii Framework で作成されているため、すべてのクラスとモデルを共有することは困難ですが、これを担当するコードの主要部分を共有しています -
$client = MyWebClient::factory();
$adapter = $client->getAdapter();
$adapter->setConfig(array('timeout' => 120,
'proxy_host' => 'localhost',
'proxy_port' => 8124
));
$client->setAdapter($adapter);
$client->setCookieJar(true);
$client->setParameterPost(array(
'name' => 'firstname',
'password' => 'password,
'login' => 'home'
));
$response = $client->setUri('https://www.domain.com/post.php')->requestApi('POST', false);
クラス MyWebClient のコンストラクターは次のとおりです。必要な場合に備えて、他のすべてのメソッドは標準です。
static public function factory($new = false)
{
if (!isset(self::$client))
{
self::$client = new MyWebClient();
self::$client->setConfig(array(
'adapter' => 'Zend_Http_Client_Adapter_Proxy',
// 'proxy_host' => 'localhost',
// 'proxy_port' => 8118,
'persistent' => false,
'timeout' => 120
));
}
return self::$client;
}
ヘッダーは requestAPI メソッドで設定されており、スニペットは -
$headers = array(
'X-PHX' => 'true',
'X-Requested-With' => 'XMLHttpRequest',
'Referer' => 'https://domain.com/index.html',
'User-Agent' => self::getRandomUserAgent()
);
$this->setHeaders($headers);
この点でお役に立てば幸いです。サーバーからリクエストを出さないのは privoxy だと思います。
サチン