2

ネイティブの Zend Framework 2 http\curl ライブラリを使用しようとしていますが、リモート アプリケーションにリクエストを送信するようにできます。POST 値を取得できません。

2 つの例を示すコードを次に示します。最初の例はネイティブ PHP curl を使用しており、正常に動作します。2 番目の例は ZF2 http\curl ライブラリを使用しており、POST パラメーターを渡しません。

例 1 (ネイティブ PHP ライブラリ)

    $url = $postUrl . "" . $postUri;

    $postString = "username={$username}&password={$password}";

    //This works correctly using hte native PHP sessions
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    $output = curl_exec($ch);
    curl_close($ch);

    var_dump($output); //outputs the correct response from the remote application

例 2 (ZF2 ライブラリの使用)

    $url = $postUrl . "" . $postUri;

    $postString = "username={$username}&password={$password}";

    //Does not work using ZF2 method!
    $request = new Request;

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

    $adapter = new Curl;

    $adapter->setOptions([
        'curloptions' => [
            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => $postString,
            CURLOPT_HEADER => 1
        ]
    ]);

    $client = new Client;
    $client->setAdapter($adapter);

    $response = $client->dispatch($request);

    var_dump($response->getBody());

私がこれでどこが間違っているかを指摘できる人はいますか? ZF2 のドキュメントを確認しましたが、最も包括的なものではありません。

4

2 に答える 2

6

これは、この問題を解決するために使用したソリューションです。

    $url = $postUrl . "" . $postUri;

    $request = new Request;
    $request->getHeaders()->addHeaders([
        'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'
    ]);
    $request->setUri($url);
    $request->setMethod('POST'); //uncomment this if the POST is used
    $request->getPost()->set('username', $username);
    $request->getPost()->set('password', $password);

    $client = new Client;

    $client->setAdapter("Zend\Http\Client\Adapter\Curl");

    $response = $client->dispatch($request);
于 2013-03-21T12:41:48.673 に答える
6

Curlアダプターでこれらすべての詳細を指定する必要はありません。それはあなたのためにZF2がすることです:

$url        = $postUrl . $postUri;
$postString = "username={$username}&password={$password}";

$client = new \Zend\Http\Client();

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

$request = new \Zend\Http\Request();

$request->setUri($url);
$request->setMethod(\Zend\Http\Request::METHOD_POST);
$request->setContent($postString);

$response = $client->dispatch($request);

var_dump($response->getContent());
于 2013-03-20T13:56:25.567 に答える