2016-05-13 19 views
0

Ich möchte einige Daten zu einem Guzzle Http Request hinzufügen. Es gibt Dateiname, Dateiinhalt und Header mit Autorisierungsschlüssel.Guzzle 6 senden mehrteilige Daten

$this->request = $this->client->request('POST', 'url', [ 
    'multipart' => [ 
     'name' => 'image_file', 
     'contents' => fopen('http://localhost:8000/vendor/l5-swagger/images/logo_small.png', 'r'), 
     'headers' => 
      ['Authorization' => 'Bearer uCMvsgyuYm0idmedWFVUx8DXsN8QzYQj82XDkUTw'] 
      ]]); 

aber ich bekomme Fehler

Catchable Fatal Error: Argument 2 passed to GuzzleHttp\Psr7\MultipartStream::addElement() must be of the type array, string given, called in vendor\guzzlehttp\psr7\src\MultipartStream.php on line 70 and defined in vendor\guzzlehttp\psr7\src\MultipartStream.php line 79

In Guzzle 6 Dokumentation so etwas wie dieses: http://docs.guzzlephp.org/en/latest/request-options.html#multipart

Wer weiß, wo ich einen Fehler gemacht?

+0

Es gibt einige Beispiele hier: [ein symfony OAuth2 API-Client erstellen, die mit Passwort Erteilung Typ authentifiziert] (http://www.inanzzz.com/index.php/post/l4zx/creating-a-symfony -oauth2-api-client-das-authentifiziert-mit-password-grant-type) und [konsumiert symfony API mit Guzzle-Client aus einer anderen Anwendung] (http://www.inanzzz.com/index.php/post/u0xf/ Consuming-symfony-api-with-guzzle-client-from-another-application) – BentCoder

+0

Danke, diese Tutorials sind jedoch auf die vorherige Guzzle-Version. Ich benutze die neueste Version. –

+0

Der erste Link verwendet guzzle 6 – BentCoder

Antwort

4

Hier ist die Lösung. Header mit Zugriffs-Token sollte außerhalb mehrteiligen Abschnitts sein.

$this->request = $this->client->request('POST', 'request_url', [ 
      'headers' => [ 
       'Authorization' => 'Bearer access_token' 
      ], 
      'multipart' => [ 
       [ 
        'Content-type' => 'multipart/form-data', 
        'name' => 'image_file', 
        'contents' => fopen('image_file_url', 'r') 
       ] 
      ] 
     ]); 
1

sich nach den docs „Der Wert von mehrteiliger ist ein Array von assoziativen Arrays“, so dass Sie eine Ebene zu nisten müssen tiefer:

$this->request = $this->client->request('POST', 'url', [ 
    'multipart' => [ 
     [ 
      'name' => 'image_file', 
      'contents' => fopen('http://localhost:8000/vendor/l5-swagger/images/logo_small.png', 'r'), 
      'headers' => ['Authorization' => 'Bearer uCMvsgyuYm0idmedWFVUx8DXsN8QzYQj82XDkUTw'] 
     ] 
    ] 
]); 
+0

Ich formatiere den Code, aber bekomme den gleichen Fehler. –

+0

@ PrzemekGawłowski Ich meine nicht, Sie müssen nur den Code anders formatieren, müssen Sie die mehrteilige Option "ein Array von assoziativen Arrays" geben. In Ihrem Code geben Sie nur ein einzelnes assoziatives Array. Wickeln Sie einige zusätzliche eckige Klammern um es wie in meinem Beispiel. – iainn

+0

Sie haben Recht, mein Schlechter. So, jetzt habe ich diese Fehlermeldung :-( 'Abnehmbare Fatal Error: Objekt der Klasse GuzzleHttp \ Psr7 \ Response konnte nicht umgewandelt werden, um in features \ bootstrap \ FeatureContext.php Zeile 246' –