Postar um arquivo em um serviço da web com o Guzzle

Eu tenho tentado por várias horas para fazer uma solicitação POST que envia um arquivo.

Primeiro tentei um simplesfile_get_contents() com contexto de fluxo, parece não funcionar. Eu nunca recebo uma resposta enquanto o GET em um URL diferente funciona.

Eu procurei na web por um cliente HTTP e encontrei o Guzzle que foi baixado 400k vezes no Packagist; Eu decidi experimentar esta tecnologia. Bem documentado, mas, infelizmente, recebendo um erro também ao postar esse arquivo maldito.

$request = $client
    ->post('/files/')
    ->addPostFields(array('comments' => 'no value'))
    ->addPostFile('file', 'test.doc')
    ->setAuth($this->username, $this->password);

Levei horas de leitura e vasculhando a web para descobrir que eu tinha um problema de "417 Expectation Failed".

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>417 Expectation Failed</title>
</head><body>
<h1>Expectation Failed</h1>
<p>The expectation given in the Expect request-header
field could not be met by this server.
The client sent<pre>
    Expect: 100-Continue, 100-Continue
</pre>
</p><p>Only the 100-continue expectation is supported.</p>
</body></html>

Depois de mais pesquisas na web, acabei lendo no cabeçalho "Expect: 100-continue" que foi enviado automaticamente pelo Guzzle, então eu tentei:

$request->removeHeader('expect');

Agora acabo com um pedido ruim:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Request header field is missing ':' separator.<br />
<pre>
zzle/3.7.3 curl/7.15.5 PHP/5.3.27</pre>
</p>
</body></html>

Imprimindo os cabeçalhos de solicitação para descobrir que: missing, recebo:

var_dump($request->__toString());

POST /files/ HTTP/1.1
Host: nunc57.qc.bell.ca
User-Agent: Guzzle/3.7.3 curl/7.15.5 PHP/5.3.27
Content-Type: multipart/form-data
Authorization: Basic bm92YTpzeW5hcHNl

Agora estou realmente perplexo, espero que alguém já tenha encontrado uma solução para esse problema. Estou ficando muito cansado de tudo isso :(

questionAnswers(1)

yourAnswerToTheQuestion