2
$adapter = new \Zend\Http\Client\Adapter\Curl();

    $client = new \Zend\Http\Client($url);
    $client->setAdapter($adapter);
    $client->setMethod('POST');
    $adapter->setOptions(array(
        'curloptions' => array(
                            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => $data,
            CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
            CURLOPT_USERPWD => "username:password",
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_SSL_VERIFYPEER => FALSE,
            CURLOPT_SSL_VERIFYHOST => FALSE,

        )
    ));
  $client->send();

上記は私が使用しているものを抜粋し、ここのドキュメントをフォローしていますhttp://framework.zend.com/manual/2.0/en/modules/zend.http.client.adapters.html

問題は、自分でcurl関数を呼び出すと、正常に機能し、有効な応答が得られることです。しかし、zend規則を使用すると、401-が許可されなくなります。imが使用しているcurlオプションは、どちらの方法でも同じです。

何かアドバイス?

4

3 に答える 3

3

CURLOPT_POSTFIELDSとCURLOPT_POSTはCurl.phpのinvalidOverwritableCurlOptions配列によってブロックされているため、代わりにクライアントでパラメーターを設定します。

次のように、Zend / Http/ClientでsetParameterPostメソッドを使用します。

    use Zend\Http\Client;
    use Zend\Http\Client\Adapter\Curl;

    //some post params
    $postParams = array('per_page' => 25);

    $adapter = new Curl();
    // -- add your curl options here (excluding CURLOPT_POST and CURLOP_POSTFIELDS --

    $client = new Client('https://example.com/somePage');
    $client->setAdapter($adapter);
    $client->setMethod('POST');
    $client->setParameterPost($postParams);
    $response = $client->send($client->getRequest());

    //output the response
    echo $response->getBody()."<br/>";

Clientクラスがとにかくリクエストオブジェクトを作成するので、リクエストオブジェクトを作成する必要はありません。上記のコードでは、クライアントがgetRequestメソッドを使用して作成したものを取得し、それをsendメソッドに渡します。

于 2013-11-26T02:09:10.523 に答える
2

その例で問題が発生したことを覚えているので、別の例を使用しました。これは私にとってはうまくいきます。

$request = new Request();
$request->setUri($url);
$request->setMethod('POST');

$client = new Client();
$adapter = new \Zend\Http\Client\Adapter\Curl();
$client->setAdapter($adapter);

$adapter->setOptions(array(
    'curloptions' => array(
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
        CURLOPT_USERPWD => "username:password",
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_SSL_VERIFYPEER => FALSE,
        CURLOPT_SSL_VERIFYHOST => FALSE,
    )
));

$response = $client->dispatch($request);
于 2012-12-14T03:44:03.233 に答える
0

Zendは、オプションCURLOPT_POSTFIELDSを上書きすることを許可していません。

あなたはそれを上書きする方法を理解する必要があります。

Zendライブラリのcurl.phpのinvalidOverwritableCurlOptionsからこのオプションを削除すると、問題が解決します。しかし、あなたは図書館に干渉しない方法を見つける必要があります。

于 2013-03-15T10:40:16.013 に答える