0

私は本当にこれで立ち往生しており、専門家の助けが必要です. 私が達成しようとしていることとセットアップについて説明しましょう。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 だと思います。

サチン

4

2 に答える 2

0

最後に、ネイティブの cURL ライブラリとそれに付属する cookieJar を使用することにしました。期待どおりに機能しました。

乾杯、サチン

于 2012-10-15T09:51:53.317 に答える
0

ユーザーエージェントを引用符で囲む必要があるようです。ヘッダーを設定するときにこれを試して、問題が解決するかどうかを確認してください。

$headers = array(
        'X-PHX' => 'true',
        'X-Requested-With' => 'XMLHttpRequest',
        'Referer' => 'https://domain.com/index.html',
        'User-Agent' => "'".self::getRandomUserAgent()."'"
    );
    $this->setHeaders($headers);
于 2012-08-07T19:51:26.793 に答える