代码之家  ›  专栏  ›  技术社区  ›  p.wright

Zend2 Post请求

  •  1
  • p.wright  · 技术社区  · 7 年前

    我正在尝试使用Zend2向端点发出POST请求。

    我可以使用Curl在PHP中完成这篇文章,但无法使用Zend2客户端和请求复制Curl请求。

    例如,以下操作很好。

    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST, 1);
    
    $postfields = array();
    $postfields['CostCode'] = '999999801';
    
    curl_setopt($ch, CURLOPT_POSTFIELDS, 
              $postfields);
    
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                            'Content-Type: multipart/form-data; 
    charset=UTF-8',
                                            'Connection: Keep-Alive'
                                            ));
    
    // receive server response ...
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $server_output = curl_exec ($ch);
    
    curl_close ($ch);
    

    返回的结果:-

    <ValidateCCResult xmlns="http://ws.apache.org/ns/synapse">
    <Result>1</Result></ValidateCCResult>
    

    表示成本代码有效。

    但是,当我尝试在Zend中重现这一点时,我并没有得到预期的响应。

        $postfields = array();
        $postfields['CostCode'] = '999999801';
    
        $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->getHeaders()->addHeaders([
            'Content-Type' => 'multipart/form-data; charset=UTF-8'
        ]);
    
        $request->setContent($postfields);
    
        $response = $client->dispatch($request);
    
    <ValidateCCResult xmlns="http://ws.apache.org/ns/synapse"><Result>0</Result>
    <Message/></ValidateCCResult>
    

    我尝试了不同的内容类型,但有一种感觉,这与setContent改变$postfields的数组有关。

    1 回复  |  直到 7 年前
        1
  •  2
  •   zen    7 年前

    尝试使用

    $postfields['CostCode'] = '999999801';
    $uri                    = 'http://localhost';
    
    $client = new \Zend\Http\Client();
    $client->setUri($uri);
    $client->setMethod('POST');
    $client->setOptions(array(
        'keepalive'   => true,
    ));
    $client->setEncType(\Zend\Http\Client::ENC_FORMDATA);
    
    $client->setParameterPost($postfields);
    $response = $client->send();
    
    echo $response->getBody();