2013-10-22 10 views
8

Ho provato a leggere i documenti di Guzzle ma non riesco a risolvere il problema.Conversione di questo cURL per Guzzle

voglio usare Guzzle invece di cURL per i seguenti:

protected $url = 'https://secure.abcdef.com/cgi/xml_request_server.php'; 

    $xml = "<ABCRequest>\n"; 
    $xml .=  "<Authentication>\n"; 
    $xml .=   "<ABLogin>$this->gwlogin</ABLogin>\n"; 
    $xml .=   "<ABKey>$this->gwkey</ABKey>\n"; 
    $xml .=  "</Authentication>\n"; 
    $xml .=  "<Request>\n"; 
    $xml .=   "<RequestType>SearchABC</RequestType>\n"; 
    $xml .=  "</Request>\n"; 
    $xml .= "</ABCRequest>\n"; 

    $header = "POST $this->url HTTP/1.1\n"; 
    $header .= "Host: domain.com\n"; 
    $header .= "Content-Length: ".strlen($xml)."\n"; 
    $header .= "Content-Type: text/xml; charset=UTF8\n"; 
    $header .= "Connection: close; Keep-Alive\n\n"; 
    $header .= $xml; 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $this->url); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 120); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header); 

    $response = curl_exec($ch); 
    curl_close($ch); 

Ho provato questo, ma io sono ancora nuovo a questo ...:

$client = new Client($this->url); 
$response = $client->get($xml); 
+0

Oltre alla risposta che hai già potresti trovare utile conoscere Tipo di stringhe HEREDOC in PHP: http://php.net/language.types.string.php#language.types.string.syntax.heredoc – hakre

risposta

11

si può fare uso di Client::post() per creare una richiesta POST HTTP:

$client = new Client($this->url); 
$request = $client->post(
    '', 
    ['Content-Type' => 'text/xml; charset=UTF8'], 
    $xml, 
    ['timeout' => 120] 
); 
$response = $request->send()->xml();; 
+1

Perfetto. L'ho leggermente modificato per ottenere l'xml: $ request = $ this-> client-> post ('', array(), $ xml); \t \t $ response = $ request-> send() -> xml(); – Dru

+0

Non penso che questo esempio copra l'impostazione di timeout di 120 secondi e non indirizzi il tipo di contenuto e l'uso della codifica del charset all'interno del corpo della richiesta. – hakre

+0

@hakre prova aggiornato uno e leggi i documenti - http://guzzlephp.org/http-client/client.html#creating-requests-with-a-client qui sono esempi –